正如标题所说,我试图通过+=
运算符将文本附加到隐式展开的可选字符串中,这样就可以给我
'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
答案 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"