Swift 2 / XCode 7 中惰性变量中的字符串文字 [无法转换字符串类型的值 ...]
String literals in lazy vars in Swift 2 / XCode 7 [Cannot convert value of type String ...]
每当字符串文字出现在 lazy var
的声明中时,我都会在 Swift 2 / XCode 7 中收到编译错误:Cannot convert value of type String to expected argument type '(_builtinStringLiteral: RawPointer, byteSize: Word, isASCII: Int1)' ...
(我在 Swift 1.2 / XCode 6 中没有问题)
产生此错误的最简单的行如下所示:
lazy var foo = "bar"
但更相关的是(恼人的),它也发生在接受字符串参数的初始化器中:
lazy var viewsLabel = HWLabel(color: COLOR_WHITE, font: ProximaNova("Semibold", 13))
lazy var durationIconView = HWIconView(imageName: "TimeIcon", color: COLOR_WHITE)
这些显然是我自己的初始化器,我注意到 Apple SDK 似乎并不经常将字符串作为初始化器中的参数。 init
中的字符串是不好的做法吗?
有效的方法是将声明包装在一个块中。
我现在可能会这样做,或者只是让它们不 lazy
。
不过我还是很好奇。这是 XCode 7 错误吗?
更新:
刚注意到起作用的是不是将声明包装在闭包中,而是指定 var 的类型,这样它就不会被推断出来。
所以,什么有效:
lazy var viewsLabel: HWLabel = HWLabel(color: COLOR_WHITE, font: ProximaNova("Semibold", 13))
lazy var durationIconView: HWIconView = HWIconView(imageName: "TimeIcon", color: COLOR_WHITE)
为什么 lazy var
声明中字符串的出现会扰乱类型推断,这让我无法理解。仍然有一种预感,它可能是一个 XCode 7 错误。
这是一个错误,如果您添加它可以编译的 var 类型:
我在这里找到了答案:
每当字符串文字出现在 lazy var
的声明中时,我都会在 Swift 2 / XCode 7 中收到编译错误:Cannot convert value of type String to expected argument type '(_builtinStringLiteral: RawPointer, byteSize: Word, isASCII: Int1)' ...
(我在 Swift 1.2 / XCode 6 中没有问题)
产生此错误的最简单的行如下所示:
lazy var foo = "bar"
但更相关的是(恼人的),它也发生在接受字符串参数的初始化器中:
lazy var viewsLabel = HWLabel(color: COLOR_WHITE, font: ProximaNova("Semibold", 13))
lazy var durationIconView = HWIconView(imageName: "TimeIcon", color: COLOR_WHITE)
这些显然是我自己的初始化器,我注意到 Apple SDK 似乎并不经常将字符串作为初始化器中的参数。 init
中的字符串是不好的做法吗?
有效的方法是将声明包装在一个块中。
我现在可能会这样做,或者只是让它们不 lazy
。
不过我还是很好奇。这是 XCode 7 错误吗?
更新:
刚注意到起作用的是不是将声明包装在闭包中,而是指定 var 的类型,这样它就不会被推断出来。
所以,什么有效:
lazy var viewsLabel: HWLabel = HWLabel(color: COLOR_WHITE, font: ProximaNova("Semibold", 13))
lazy var durationIconView: HWIconView = HWIconView(imageName: "TimeIcon", color: COLOR_WHITE)
为什么 lazy var
声明中字符串的出现会扰乱类型推断,这让我无法理解。仍然有一种预感,它可能是一个 XCode 7 错误。
这是一个错误,如果您添加它可以编译的 var 类型:
我在这里找到了答案: