2014-09-26 33 views
0

我正在做一個infoDictionary主要NSBundle屬性的字典查找。這工作正常:Swift編譯器錯誤使用字典查找和強制轉換

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)'

我意識到這是那些神祕的斯威夫特編譯消息之一,這意味着什麼比更瑣碎它明確指出 - 但我無法確定我的兩個上面的代碼片段是如何不同的 - 爲什麼一個工作,一個不工作。

回答

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 { 
    ... 
} 
+0

沒錯,果然。我一直忘記'String'是一個結構體。謝謝! – 2014-09-26 01:18:32