正在为Swift类型创建自定义初始化



我想为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。

最新更新