2016-02-25 30 views
-1

我是Swift的新手,正在嘗試學習可選綁定的概念。我已經想出了下面的代碼:無法在可選綁定中使用可選int「possibleNumber」

let possibleNumber = Int("123") 
possibleNumber.dynamicType 
if let actualNumber = Int(possibleNumber){ 
    print("\(possibleNumber) has an integer value of \(actualNumber)") 
} else { 
    print("\(possibleNumber) could not be converted to an int") 
} 

Xcode的操場輸出錯誤信息:

​​

然而,當我添加了 「!」到if let actualNumber = Int(possibleNumber!){

let possibleNumber = Int("123") 
possibleNumber.dynamicType 
if let actualNumber = Int(possibleNumber!){ 
    print("\(possibleNumber) has an integer value of \(actualNumber)") 
} else { 
    print("\(possibleNumber) could not be converted to an int") 
} 

Xcode中顯示另一條錯誤消息:

initialiser for conditional binding must have Optional type, not int 

這究竟是爲什麼?

回答

1

let possibleNumber = Int("123") 

結果是一個可選的詮釋 - Int?

然後你想創建另一個Int

Int(possibleNumber) 

不工作,因爲初始化需要一個非可選類型。 錯誤消息與初始化程序相關,而不是與可選綁定有關。

試試這個來得到相同的錯誤信息。

let possibleNumber = Int("123") 
let x = Int(possibleNumber) 

在你的第二個例子,當你初始化一個Int有一個隱含的展開Int!參數,你得到一個非可選Int和編譯器抱怨缺少可選。

+0

我正確地說,對於第二個例子來說,如果讓actualNumber = Int(possibleNumber),actualNumber期望是可選類型,但是Int(possibleNumber!)等於非可選int類型,這就是XCode抱怨的原因嗎? – Thor

+0

是的,你說得對。 – vadian

1

if let構建

if let actualNumber = Int(possibleNumber!){ 
    print("\(possibleNumber) has an integer value of \(actualNumber)") 
} 

你不需要使用Int初始化。您只需編寫

if let actualNumber = possibleNumber { 
    print("\(possibleNumber) has an integer value of \(actualNumber)") 
} 

現在Swift會嘗試解包possibleNumber。如果操作確實成功,則將解包值放入actualNumberTHEN塊中。