【发布时间】:2017-08-16 19:23:35
【问题描述】:
我按照 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] 尼尔·史密斯。 2015. iOS 8 App Development Essentials - Second Edition:学习使用 Xcode 和 Swift 1.2 开发 iOS 8 应用程序。国际标准书号 978-1511713337。
【问题讨论】:
-
跟随一本关于 Swift 1.2 的书会给你带来更多的问题而不是它的价值。 Swift 4 将在几周后发布(现在是测试版)。帮自己一个大忙,找到为 Swift 3 编写的教程。
-
在编写 Swift 3 时,为什么有人会尝试使用 Swift 1.2 的书?这些是完全不同的语言!
-
let fahrenheit = Double(tempText.text)?见那里:stackoverflow.com/questions/40372656/… -
你真的应该找到一本关于 Swift 3 甚至 Swift 4 的书(这些书很快就会面世)
-
你可以做
Double(tempText.text!)!。或者,更安全的guard let string = tempText.text, let fahrenheit = Double(string) else { return }。
标签: swift