为什么不可能附加一个字符串!通过 += 运营商?

Why isn't is possible to append a String! via += operator?

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

'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

您的代码没有任何问题。看起来在 Swift 的标准库中没有 += 运算符重载来处理字符串选项。

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

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

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

备注

你的代码最好写成:

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

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

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

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

它将尝试使用 String 查找 += 运算符!它不能,因此错误。

如果你明确地打开它(你可以说它违背了目的)有效:

 myOptionalString! += " bar"