我想为Swift类型进行自定义初始化。因此,我对两种不同的类型进行了测试,以查看结果。
例如,我想为String
进行自定义初始化。我找不到任何需要String
进行初始化的初始化。我想到的最好的选择是使用LosslessStringConvertible
作为名称——这应该使String
值起作用。
extension String {
init<T:LosslessStringConvertible>(name: T) {
self.init(name)
}
}
我的另一次尝试是使用CGColor,但由于未知的原因,该代码没有构建:
extension CGColor {
init(_ value: CGFloat) {
self.init(red: value, green: value, blue: value, alpha: value)
}
}
错误:
指定的初始值设定项不能在"CGColor"的扩展中声明
我的目标:我应该采取哪些步骤来确保我的自定义初始化方法是正确的,并适用于Swift类型
基本上,这是因为Objective-C中实现的一些Foundation类型不是class,而是其他一些结构,在这种情况下,CGColor可能是一个C结构。除非你深潜,否则这在Swift中对你来说大多是隐藏的。
您的String示例之所以有效,是因为它是一个类,并且可以在扩展中实现init。
就您可以采取的步骤而言,您可以尝试为这些有点原始的对象创建包装类/结构。
如
struct JnPDxPoint {
let value: CGPoint
init(_ value: CGPoint) {
self.value = value
}
}
这将允许您进行
extension JnPDxPoint {
init(_ value: CGFloat) {
self.init(.init(red: value, green: value, blue: value, alpha: value))
}
}
在更具体的级别上,您可以只使用UIColor或NSColor,并根据需要转换为CGColor。