表达式类型“@lvalue 字符串?”当 += 到 UILabel.text 时,在没有更多上下文的情况下是模棱两可的

Expression type '@lvalue String?' is ambiguous without more context when += to UILabel.text

当有人点击标有 7 的按钮时,我试图将字符串“7”添加到标签中。

但是当使用 += "7" 时,它给我错误 "Expression type '@lvalue String?' is ambiguous without more context",当使用 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 属性 是可选的。安全地做到这一点:

valueLabel.text =  (valueLabel.text ?? "") + "7"

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

valueLabel.text?.append("7")

或将 += 可选链接一起使用 :

valueLabel.text? += "7"

如果标签是 nil,这些将安全地不做任何事情。如果您希望标签为 "7" 如果它是 nil,则使用 .