当我打开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)
}
}
答案 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)
}
}
几个问题:
displayValue
与@IBAction
?+
运算符在此处display.text = currentText + digit
连接两个字符串。只是确认你没有尝试添加两个数字?