为什么不能追加一个字符串! via + =运算符?

时间:2015-03-27 10:11:34

标签: ios string swift uitextview

正如标题所说,我试图通过+=运算符将文本附加到隐式展开的可选字符串中,这样就可以给我

'String!' is not identical to 'UInt8'

让你明白我的意思:

var myString: String = "Hello "
myString += "world" // works great

var myOptionalString: String! = "Foo "
myOptionalString += " bar" // error: String! is not identical to 'UInt8'

然而,如果我在作业分配时附加它<​​/ p>

var myOptionalString: String! = "Foo "
myOptionalString = myOptionalString + " bar" // works great

任何人都可以告诉我这个原因,或者我在选项中错过了什么?

更新

mySecondOpString: String? = "Hello "
mySecondOpString! += "world" // works great too

2 个答案:

答案 0 :(得分:2)

的字符串!是隐式展开的可选类型,这是可选类型的特例。

你可能知道String!与String不同。所以当你写:

var myOptionalString: String! = "Foo "
myOptionalString += " bar" // error: String! is not identical to 'UInt8'

它会尝试用String找到+ =运算符!它不能和因此错误。

如果你明确地解开它(你可以说它无视目的)可行:

 myOptionalString! += " bar"

答案 1 :(得分:0)

您的代码没有任何问题。看起来在Swift的标准库中,没有+=运算符重载用于使用String选项。

从标准库中获取,+ =重载String(不是String?)

func +=(inout lhs: String, rhs: String)

只需按照这个不错的SO answer查看Swift标准库的内容即可检查

注意

您的代码将更好地编写为:

var myOptionalString: String? = "Foo "
myOptionalString
myOptionalString! += " bar"