打开时意外地发现了零

时间:2016-06-19 12:32:35

标签: swift

当我打开Double(display.text!)时,我的代码崩溃了! 我提出了if条件,但它没有工作

@IBAction private func buttonpress(sender: UIButton)
{
   let digit = sender.currentTitle!
    if userisinthemiddle
    {
        let currenttext = display.text!
        display.text = currenttext + digit
    }
    else
    {
        display.text = digit
    }
    userisinthemiddle = true
}

直到这里才能正常工作但是当我尝试将其作为财产时,它无法正常工作

var DisplayValue : Double
{
    get
    {
         return Double(display.text!)!  // thread 1 
      }

    set
    {
        display.text = String(newValue)
    }
}

1 个答案:

答案 0 :(得分:1)

强制解包变量通常不是一个好主意,除非你真的希望程序在发生故障时崩溃(根据我的经验,这很少见)。在这种情况下,听起来它会抑制您诊断问题的能力。尝试这样的方法(1)避免力展开和(2)处于更好的位置以对意外值做出反应。

@IBAction private func buttonPress(sender: UIButton)
{
    guard let digit = sender.currentTitle else 
    {
        assertionFailure("digit is nil.")

        return
    }

    print("digit: \(digit)"

    if userIsInTheMiddle
    {
        let currentText = display.text ?? "" // If display.text is nil, set currentText to an empty string
        print("currentText: \(currentText)"

        display.text = currentText + digit
    }
    else
    {
        display.text = digit
    }

    print("display.text: \(display.text)"

    userIsInTheMiddle = true
}

var displayValue: Double
{
    get
    {
         let text = display.text ?? ""

         guard let double = Double(text) else 
         {
             // You probably want to replace this `assertionFailure` and return a default value like 0

             assertionFailure("text could not be converted to a Double")

             return
         }

         return double
    }

    set
    {
        display.text = String(newValue)
    }
}

几个问题:

  1. 属性displayValue@IBAction
  2. 的关系如何?
  3. 您正在使用+运算符在此处display.text = currentText + digit连接两个字符串。只是确认你没有尝试添加两个数字?