转换'String?'类型的值键入'NSString'
问题描述:
我按照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。
答
一个类型转换为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"
}
}
继一书,对雨燕1.2将会给你带来远远更多的问题比它的价值。 Swift 4将在几周内出现(测试版)。做你自己的忙,并找到为Swift 3编写的教程。 – rmaddy
为什么任何人在编写Swift 3时都会尝试使用Swift 1.2的书?这些是完全不同的语言! – matt
'let fahrenheit = Double(tempText.text)'?看到这里:https://*.com/questions/40372656/convert-optional-string-to-double-in-swift-3 – Larme