2017-08-16 144 views
0

我按照Swift 1.2的一本書[1]上的說明來學習如何使用一個文本字段,一個按鈕和一個結果標籤來製作一個簡單的溫度轉換應用程序。我正在使用Swift 3.你在文本字段中輸入溫度,按下「Convert」按鈕,你應該得到結果,但是我得到「不能轉換類型'String'的值?'在強制中鍵入'NSString'。轉換'String?'類型的值鍵入'NSString'

import UIKit 

class ViewController : UIViewController { 

    @IBOutlet weak var tempText : UITextField! 

    @IBOutlet weak var resultLabel : UILabel! 

    override func viewDidLoad() { 

     super.viewDidLoad() 
    } 

    @IBAction func convertTemp(_ sender: Any) { 

     let fahrenheit  = (tempText.text as NSString).doubleValue 
     let celsius   = (fahrenheit - 32)/1.8 
     let resultText  = "Celsius \(celsius)" 
     resultLabel.text = resultText 
    } 

    override func didReceiveMemoryWarning() { 

     super.didReceiveMemoryWarning() 
    } 
} 

我可以作爲以後像這樣添加一個感嘆號:

let fahrenheit  = (tempText.text as! NSString).doubleValue 

但我仍然收到了警告:‘串’「從演員到不相關的類型'NSString'總是失敗「。

Swift 3應該怎麼做?

[1] Neil Smyth。 iOS 8應用程序開發要點 - 第二版:學習使用Xcode和Swift 1.2開發iOS 8應用程序。 ISBN 978-1511713337。

+5

繼一書,對雨燕1.2將會給你帶來遠遠更多的問題比它的價值。 Swift 4將在幾周內出現(測試版)。做你自己的忙,並找到爲Swift 3編寫的教程。 – rmaddy

+1

爲什麼任何人在編寫Swift 3時都會嘗試使用Swift 1.2的書?這些是完全不同的語言! – matt

+0

'let fahrenheit = Double(tempText.text)'?看到這裏:https://stackoverflow.com/questions/40372656/convert-optional-string-to-double-in-swift-3 – Larme

回答

3

一個類型轉換爲NSString得到一個Double是一個非常不好的習慣(即使在Swift 1中)。

一個安全的斯威夫特3解決方案是可選的綁定的text屬性和Double轉換

@IBAction func convertTemp(_ sender: Any) { 

    if let degrees = tempText.text, let fahrenheit = Double(degrees) { 
     let celsius   = (fahrenheit - 32)/1.8 
     let resultText  = "Celsius \(celsius)" 
     resultLabel.text = resultText 
    } else { 
     resultLabel.text = "Conversion failed" 
    } 
} 
+0

這也適用。謝謝! – tomihasa

+0

@tomihasa請注意,這個答案比你在最後一個評論下面提到的兩行要好得多。當用戶輸入的值不是有效數字時,此代碼不會崩潰。 – rmaddy

相關問題