为什么'+ ='不能用于隐式解包的选项?

yzy*_*sun 5 optional swift

更新UITextView的文本时,我发现textView.text += "..."不起作用.编译器警告我"二进制运算符'+ ='不能应用于'String'类型的操作数." 和'字符串'".似乎我必须追加一个感叹号textView.text.

但是,如果我将其扩展到textView.text = textView.text + "...",它就可以了.我想知道它是设计成这样还是我误解了什么?

mix*_*xel 2

隐式解包的可选值仍然是 anOptional并且它与它包装的类型不同。所以你需要定义运算符:

func +=(inout l: String!, r: String) {
    l = (l ?? "") + r
}

var a: String! = "a"
var b: String = "b"

a += b // "ab"
Run Code Online (Sandbox Code Playgroud)