2015-12-03 9 views
5

UITextViewのテキストを更新すると、textView.text += "..."が機能しないことがわかりました。コンパイラは、 "バイナリ演算子 '+ ='を 'String'型のオペランドに適用できないと警告しました。と '文字列' "です。 textView.textの後に感嘆符を付ける必要があるようです。暗黙のうちにアンラップされたオプションの '+ ='はなぜ機能しないのですか?

ただし、textView.text = textView.text + "..."に展開しても機能しました。私はそれがこのように設計されているのか、私は何か誤解しているのだろうか?

+3

[暗黙的にアンラップされたオプションのインクリメント](http://stackoverflow.com/questions/33504945/incrementing-an-implicitly-unwrapped-optional)の場合と本質的に同じ問題です。 –

答えて

2

暗黙的にアンラップされたオプションはまだOptionalであり、ラップするタイプとは異なります。ですから、演算子を定義する必要がありますuは+ =「テキスト」textField.textを行っているとき

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

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

a += b // "ab" 
0

の両方が、異なっている、uはそれを別の文字列を追加していることを意味します。しかし、あなたがtextField.text = textField.text + "text"を使用しているときは、2文字列を追加してtextFieldに設定することを意味します。

関連する問題