2014-08-31 62 views
0

使用swift和Xcode 6,我試圖返回基於少數UITextFields的內容計算出的值。Swift計算UITextFields的值並返回值

我已經聲明的變量

var Number1 = Field1.text.toInt() 
var Number2 = Field2.text.toInt() 

var Duration = Number1*Number2 

Mylabel.text = String ("\(Duration)") 

的想法是捕捉一些UI場持續時間以及基於這些值的計算賦值給變量以及顯示它的標籤上。

在行:VAR持續時間=數字1 * NUMBER2

挑戰是,我是執行乘法Xcode中的亮點錯誤時:可選類型的價值「詮釋?」不打開;你的意思是使用'!'要麼 '?'?

+3

你的問題是什麼? – 2014-08-31 04:55:37

+1

變量不能有空格。這:'Number1','Number2'。 **不是這個**:'Number 1','Number 2'。 – 2014-08-31 05:33:14

+0

你遇到什麼問題?從我們可以看到的代碼中,它應該正常工作(除了變量名稱中的空格)。 – drewag 2014-08-31 06:20:15

回答

3

toInt()方法返回一個可選價值,因爲該字符串它正試圖轉換可能不包含一個適當的值。例如,這些字符串將被轉換爲nil"house""3.7",""(空字符串)。

由於值可以是niltoInt()返回一個可選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)" 
}  
+0

在行:VAR持續時間=數字1 * NUMBER2 挑戰是,我是執行乘法Xcode中的亮點錯誤時:可選類型的價值「詮釋?」不打開;你的意思是使用'!'要麼 '?'? – DanteDeveloper 2014-08-31 13:38:15

+0

你有沒有試過我的代碼? – vacawama 2014-08-31 13:39:52

+0

是的,非常感謝你的工作。聲明變量使用:let number1 = field1.text.toInt()?? 0工作! – DanteDeveloper 2014-08-31 16:51:30

0

獲取var中的textFields的值,將它們相乘,然後設置標籤的值。試試這個:

var Number1 = Field1.text.toInt() 
var Number2 = Field2.text.toInt() 

var Duration = Number1 * Number2 

Mylabel.text = NSString(format:"%d",Duration!)as String; 

希望這有助於.. :)