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

5
当我想更新UITextView的文本时,我发现textView.text += "..."不起作用。编译器警告我“二进制运算符'+='不能应用于类型为'String!'和'String'的操作数”。似乎我必须在textView.text后面添加一个感叹号。
然而,如果我将其扩展为textView.text = textView.text + "...",它就能正常工作了。我想知道这是故意设计成这样还是我理解错了什么?

3
基本上和这个问题相同:如何对一个隐式解包的可选类型进行自增操作? - Martin R
2个回答

2

隐式解包可选项仍然是一个Optional,它与其包装的类型不同。因此,您需要定义运算符:

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

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

a += b // "ab"

0

这两种方式是不同的,当你使用textField.text+="text"时,意味着你在其后添加了另一个字符串。但是当你使用textField.text = textField.text + "text"时,意味着你将两个字符串相加并设置为textField的值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接