当有人选中标记为7的按钮时,我试图将字符串“7”添加到标签。
但是当使用+ =“7”时,它给出了错误“表达式类型'@lvalue String?'没有更多的上下文是模棱两可的“,当使用operator =”7“时,它工作正常。为什么+ =“7”不起作用?
class NumberPadController: UIViewController {
@IBOutlet weak var valueLabel: UILabel!
/// set value in main vc and return to that.
@IBAction func doneEntering(_ sender: Any) {
guard let valueString = valueLabel.text, let valueDouble = Double(valueString), let presentingVC = self.presentingViewController as? ViewController else {
// FIXME: Show error
dismiss(animated: true, completion: nil)
return
}
presentingVC.valuePassedFromNumPad = valueDouble
dismiss(animated: true, completion: nil)
}
@IBAction func seven(_ sender: Any) {
valueLabel.text += "7" // Expression type '@lvalue String?' is ambiguous without more context
valueLabel.text = "a" // works fine
}
}
text
属性是可选的。安全地执行此操作的一种方法是使用append
以及可选链接:
valueLabel.text?.append("7")
或使用带有可选链接的+=
:
valueLabel.text? += "7"
如果标签是nil
,这些将安全无所作为。如果你想要标签是"7"
,如果它是nil
,那么使用@RickyMo's solution。
text
属性是可选的。要安全地做到:
valueLabel.text = (valueLabel.text ?? "") + "7"