为什么不可能追加一个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"