Xcode 6 Beta7 NSDictionary到Swift
在从更新到Beta 7的大量错误中,我得到了这个让我头疼的特别之处……
let views:NSDictionary = [ "leftView": _leftVC.view, "rightView": _rightVC.view, "outerView": _scrollView.superview ];
错误:无法将表达式’type’类型转换为’StringLiteralConvertible’类型需要’views’的方法需要一个NSDictionary,因此我不能只使用Swift Dictionary。
我如何调整上述代码以满足Xcode6 Beta7?
问题是UIScrollView.superview
是可选的,所以你必须把unwrapped值放在字典中
let views:NSDictionary = [ "leftView": _leftVC.view, "rightView": _rightVC.view, "outerView": _scrollView.superview! ];
使用更安全的逻辑而不是隐式展开(即检查superview
不是nil),除非您100%确定它包含非零值。
即使views
变量是NSDictionary
类型,您用来初始化它的字典文字也会计算为一个swift字典 – 然后它会静默地桥接到NSDictionary
。
编译器抱怨的原因是_scrollView.superview
是可选的,它可能是nil,并且这是不允许的。
正如@JackLawrance所指出的,即使用文字初始化,字典也可以具有非统一值类型。
旁注:我们什么时候会收到更有意义的错误消息? 🙂