的toInt()
方法返回一個可選價值,因爲該字符串它正試圖轉換可能不包含一個適當的值。例如,這些字符串將被轉換爲nil
:"house"
,"3.7"
,""
(空字符串)。
由於值可以是nil
,toInt()
返回一個可選Int
這是類型Int?
。如果不先解開它,則無法使用該值。這就是你收到錯誤信息的原因。以下是處理此問題的兩種安全方法:
您需要決定在值無法轉換時要執行的操作。如果你只是想在這種情況下使用0
,然後用零合併運算(??
)像這樣:
let number1 = field1.text.toInt() ?? 0
// number1 now has the unwrapped Int from field1 or 0 if it couldn't be converted
let number2 = field2.text.toInt() ?? 0
// number2 now has the unwrapped Int from field2 or 0 if it couldn't be converted
let duration = number1 * number2
mylabel.text = "\(duration)"
如果你希望你的程序做什麼,除非這兩個領域都有效值:
if let number1 = field1.text.toInt() {
// if we get here, number1 contains the valid unwrapped Int from field1
if let number2 = field2.text.toInt() {
// if we get here, number2 contains the valid unwrapped Int from field2
let duration = number1 * number2
mylabel.text = "\(duration)"
}
}
那麼,當你說你的意思是使用!
時,錯誤信息是什麼意思。您可以通過在最後添加!
來打開可選值,但是您必須確保該值不是第一個,否則您的應用將崩潰。所以你也可以這樣做:
if number1 != nil && number2 != nil {
let duration = number1! * number2!
mylabel.text = "\(duration)"
}
你的問題是什麼? – 2014-08-31 04:55:37
變量不能有空格。這:'Number1','Number2'。 **不是這個**:'Number 1','Number 2'。 – 2014-08-31 05:33:14
你遇到什麼問題?從我們可以看到的代碼中,它應該正常工作(除了變量名稱中的空格)。 – drewag 2014-08-31 06:20:15