为什么不可能追加一个string! 通过+ =运营商?

正如标题所示,我试图通过+=操作符将文本附加到隐式解包的可选string,这给了我

 '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' 

但是,如果我将它附加到它的工作分配

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

任何人都可以告诉我这个原因吗,或者是我在遗漏的东西里错过了什么?

更新

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

串! 是隐式解包的可选types,它是可选types的特例。

正如你可能知道的string! 与String不相同。 所以当你写:

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

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

如果你明确地打开它(你可以说,它违背了这个目的)的作品:

  myOptionalString! += " bar" 

你的代码没有错。 它看起来像在Swift的标准库中没有+=运算符重载与String选项一起工作。

取自标准库,+ =重载为String(不适用于String?)

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

只要按照这个很好的答案来查看Swift标准库的内容来检查

注意

你的代码会写得更好:

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