2016-05-17 80 views
0

heys guys,Swift 2.2:可選綁定函數

我很新入編程,因此我遵循我當然在Udemy教我Swift 2.2。

爲了學習的目的,我一直在試圖編寫一個BMI計算器,其中我有一個textfield(只顯示數值)和一個滑塊,我可以用kg表示我的體重。拖動滑塊後,該值在文本字段中可見。我無法將一個值放入文本字​​段中,以便它顯示在滑塊上!

相同的文本框 - 滑塊關係與高度cm一起使用。現在,我創建了一個IBAction爲的把我kgSlider.value到我kgField.text,它看起來像這樣:

@IBAction func kgSet(sender: AnyObject) { 

    kgField.text! = String(Int(kgSlider.value)) 
} 

那工作正常,但我解開(如老師在使用過程中)不知道,如果真的有一個值。好的,在這種情況下,我知道會有一個值,但我想要更加真實,因此我嘗試使用可選綁定來查找,如果有值而不是直接解包它。

因此,我在我的代碼中使用了cm.Field和cm.Slider,但它現在不起作用,我不知道爲什麼。代碼如下:

@IBAction func cmSet(sender: AnyObject) { 

    if let tempCm = String(Int(cmSlider.value)) as String! { 

     cmField.text = tempCm 

    } 
} 

所以我創建了一個叫做tempCM不斷,這將有來自cmSlider值,如果有一個值。因此,我將類似於其他IBAction的cmSlider.value轉換爲Int,然後轉換爲String。如果有值,它會將其攜帶到cmField.text中。這不起作用,因此我嘗試使用「as String!」聲明,但知道我總是得到0而不是正確的值。

那麼我在那裏做錯了什麼?

+0

你爲什麼不用這個? @IBAction func kgSet(sender:AnyObject){ kgField.text = String(Int(kgSlider.value)) } 基本上,當需要展開某些東西時,您需要展開可選項。滑塊的值不是可選的(如果我們談論的是UISlider),所以沒有什麼可以解開的,如果在這種情況下使用語法,則不需要使用。 –

+0

另外,在賦值的左邊打開強制解包(像這樣:kgField.text!= ...)沒有意義,不要這樣做。如果你不確定,得到編譯器的幫助,如果你忘記解開某些東西,它總是會抱怨。 –

+0

@invisible_hand:感謝您的大力幫助!我從未想過在任務的提升方面使用解包。老師用這個!用於展開右側的文本字段(讓kgValue = Int(kgField.text!))。因此,我認爲它會再次解開它的意義,但如果你是對的,在分配的左側做它是沒有意義的! – Ari

回答

1

所以,這應該編譯好,併爲您提供您想要的結果。

@IBAction func cmSet(sender: AnyObject) { 

    if let tempCm = String(Int(cmSlider.value)) { 

     cmField.text = tempCm 

    } 
} 

你也可以試試這個

cmField.text = String(Int(cmSlider.value)) ?? " " 
在第二個例子中

,您正在使用可選的運營商說,如果你可以將它轉換爲一個整數,那麼這個int設置cmField的字符串。 text屬性設爲其值,否則使用空格作爲默認值。

+0

感謝您的幫助!我嘗試了你的第一個建議,但它總是給我一個錯誤。因此,我嘗試了你的第二個建議,它的工作。我也試着自己修復我的問題,並編寫了下面的代碼,這似乎工作:cmField.text = String(Int(cmSlider.value)) – Ari