我试图找出这个
在解包可选值时意外发现nil
代码正常工作,直到我尝试使用空UITextField的computeFahreheit Button。
关于这个主题的很多东西,我只是无法弄清楚这个代码。
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var inputCelsius: UITextField!
@IBOutlet weak var outputFahrenheit: UILabel!
@IBAction func computeFahreheit(_ sender: Any) {
var convertedNumber = Int(inputCelsius.text!)!
convertedNumber = convertedNumber * 9/5 + 32
outputFahrenheit.text = "\(convertedNumber)F"
if (inputCelsius.text == nil) {
outputFahrenheit.text = "Enter Celsius"
}else{
outputFahrenheit.text = "\(convertedNumber)"
}
任何帮助将不胜感激,谢谢。
答案 0 :(得分:1)
通过编写Int(inputCelsius.text!)!
,您可以解包text
属性和转换后的数值。此外,text
可能是空字符串或非整数值。在这种情况下,执行Int("")!
时会崩溃。
它也是可能的inputCelsius
本身就是零。
使用guard statement
确定变量是否为零值。同样(比#39;如果陈述'更清洁):
guard let numberString = inputCelsius.text, let number = Int(inputCelsius.text) else {
return
}
/* Do whatever you want with the number... */
关于Apple文档的保护声明:
一个保护语句,就像if语句一样,执行语句依赖 在表达式的布尔值上。你使用一个守卫声明 要求条件必须为true才能使代码在。之后 守卫声明将被执行。与if语句不同,是一名警卫 语句总是有一个else子句 - else子句中的代码是 如果条件不成立则执行。
答案 1 :(得分:0)
请勿尝试强行打开Int(inputCelsius.text!)!
if var convertedNumber = Int(inputCelsius.text!) {
convertedNumber = convertedNumber * 9/5 + 32
outputFahrenheit.text = "\(convertedNumber)F"
if (inputCelsius.text == nil) {
outputFahrenheit.text = "Enter Celsius"
}else{
outputFahrenheit.text = "\(convertedNumber)"
}
}
注意:尝试使用键盘类型的数字键盘,如果要将其转换为整数,则必须执行更多操作以检查有效数字。
答案 2 :(得分:0)
你在这里展开价值:
inputCelsius.text!
你应该避免使用(!)而是使用:
if let inputText = inputCelsius.text {
var convertedNumber = Int(inputText)
(...)
}