我正在从主infoDictionary
的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 {
...
}
错误是:
'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/