为什么不可能附加一个字符串!通过 += 运营商?
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"
正如标题所说,我正在尝试通过 +=
运算符将文本附加到隐式展开的可选字符串,这给了我
'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"