使用字典查找和在可选绑定中强制转换的Swift编译器错误

时间:2014-09-26 01:06:47

标签: macos swift

我正在从主infoDictionary的{​​{1}}属性进行字典查找。这很正常:

NSBundle

但是,我想把它们连在一起。但是,当我这样做时,我收到编译器错误:

let infoDict = NSBundle.mainBundle().infoDictionary
var item = infoDict["CFBundleExecutable"]
if let stringValue = item as? String {
   ...
}

错误是:

if let stringValue = NSBundle.mainBundle().infoDictionary["CFBundleExecutable"] as? String { ... }

我意识到这是那些神秘的Swift编译器消息之一,这意味着比它明确指出的东西更微不足道 - 但我无法确定我的两个代码片段之间的区别是什么 - 为什么一个有效,一个没有。< / p>

1 个答案:

答案 0 :(得分:1)

String不是对象;改为使用NSString

if let stringValue = NSBundle.mainBundle().infoDictionary["CFBundleExecutable"] as? NSString {
    ...
}

如果您希望stringValue成为String而不是NSString

if let stringValue:String = NSBundle.mainBundle().infoDictionary["CFBundleExecutable"] as? NSString {
    ...
}