2015-06-06 26 views

回答

15
let someString = 「Some String」 
let someString: String = 「Some String」 

對於這兩個:

這兩者之間的運行效率差爲零。在編譯過程中,Swift會推斷它的類型併爲你寫。但一旦編制完成,這兩個陳述就是相同的。

let someString = 「Some String」 as String 

表示您正在鑄造someString值爲字符串,如果它不是字符串。

let someString = 「Some String」 as! String 

意味着你強行鑄造「一些字符串」作爲一個字符串,但如果它是無法轉換爲字符串,然後它會崩潰的應用程序。

let someString = 「Some String」 as? String 

意味着你可選擇鑄造「Some String」字符串意味着如果不轉換爲字符串,然後它會在此時返回零,但不會崩潰。

對於最後3條語句它會編譯和工作,但將String轉換爲String絕對是錯誤的。沒有必要投入StringString

而最後2 as?as!總會在您的情況下成功。

考慮下面的例子:

let stringObject: AnyObject = "Some String" 
let someString3 = stringObject as! String 
let someString5 = stringObject as? String 

這是當你需要轉換。僅當您知道它是字符串時才使用as!。如果你不知道它是否是字符串,則使用as?

if let someString5 = stringObject as? String { 
    println(someString5) 
} 
+0

很好解釋:

只有當你確信以其它方式使用有條件的鑄像這樣迫使垂頭喪氣與as!。非常感謝。 – Vakas