我按照Swift 1.2的书[1]上的说明,如何使用一个文本字段,一个按钮和一个标签来制作一个简单的温度转换应用程序。我正在使用Swift 3.您在文本字段中键入温度,按“转换”按钮,您应该得到结果,但我得到“无法转换类型'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
但是我仍然会收到警告:“从'String?'中演员?不相关的类型'NSString'总是失败“。
如何在Swift 3中完成这项工作?
[1] Neil Smyth。 2015. iOS 8 App Development Essentials - 第二版:学习使用Xcode和Swift 1.2开发iOS 8应用程序。 ISBN 978-1511713337。
答案 0 :(得分:3)
强制转换为NSString
以获得Double
的类型是一个非常糟糕的习惯(即使在Swift 1中)。
一个安全的Swift 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"
}
}