不在文本字段中输入输入时崩溃

时间:2017-11-02 14:33:15

标签: ios swift

我试图找出这个

  

在解包可选值时意外发现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)"
    }

任何帮助将不胜感激,谢谢。

3 个答案:

答案 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) 
(...)
}