我正在从主infoDictionaryNSBundle属性进行字典查找。这可以正常工作:

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


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

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


错误是:

'String' is not a subtype of '(NSObject, AnyObject)'

我意识到这是那些隐秘的Swift编译器消息之一,其含义比它明确声明的要琐碎得多-但我无法确定上述两个代码段的不同之处-为什么一个有效,而一个无效。

最佳答案

String不是对象;使用NSString代替:

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


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

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

关于macos - 使用字典查找和强制绑定(bind)进行Swift编译器错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26050523/

10-12 02:05