表达式类型'@lvalue String?'当+ =到UILabel.text时,没有更多的上下文是模糊的

问题描述 投票:0回答:2

当有人选中标记为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
    }
}
ios swift uilabel
2个回答
3
投票

text属性是可选的。安全地执行此操作的一种方法是使用append以及可选链接:

valueLabel.text?.append("7")

或使用带有可选链接的+=

valueLabel.text? += "7"

如果标签是nil,这些将安全无所作为。如果你想要标签是"7",如果它是nil,那么使用@RickyMo's solution


4
投票

text属性是可选的。要安全地做到:

valueLabel.text =  (valueLabel.text ?? "") + "7"
© www.soinside.com 2019 - 2024. All rights reserved.