Swift 2/XCode 7中延迟变量中的字符串文字[无法转换String类型的值...]

Ian*_*rce 11 xcode ios swift xcode7 swift2

每当一个字符串文字出现在一个声明中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"
Run Code Online (Sandbox Code Playgroud)

但更相关(令人讨厌),它也发生在带有字符串参数的初始化器:

lazy var viewsLabel = HWLabel(color: COLOR_WHITE, font: ProximaNova("Semibold", 13))
lazy var durationIconView = HWIconView(imageName: "TimeIcon", color: COLOR_WHITE)
Run Code Online (Sandbox Code Playgroud)

这些显然是我自己的初始化程序,我注意到Apple SDK似乎没有经常在初始化程序中使用字符串作为args.字符串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)
Run Code Online (Sandbox Code Playgroud)

为什么lazy var声明中出现的字符串与类型推断相混淆是超出我的.仍然有预感,它可能是一个XCode 7错误.

Fjo*_*ohn 5

这是一个错误,如果你添加它可以编译的var的类型:

我在这里找到了答案:使用延迟var赋值的Swift 2.0'意外尾随闭包'错误