在 Swift 4.0 中,以下代码无法编译:
var str: String!
func someFunc(_ s: inout String?) {}
someFunc(&str)
现在我想这实际上str
是一种类型String?
,Swift 编译器似乎同意:
无法传递“字符串”类型的不可变值?作为 inout 参数
我可以通过将变量更改为类型String?
或函数参数来解决此问题,(_ s: inout String!)
但我不明白为什么必须这样做。Swift 似乎已经同意这var str : String!
是“'String' 类型的?”——那为什么不让我在这里传递呢?
是否有另一个选项可以让我的变量隐式展开,但仍将其传递给修改可选的函数?
我试过someFunc(&(str?))
了,这让事情变得更奇怪了——<strong>然后 Swift 抱怨道:
无法传递“字符串!”类型的不可变值 作为 inout 论点”。
所以str
是 aString?
但不能作为 a 传递String?
,str?
而是 a String!
?!
该代码实际上是:
var str: String!
func someFunc(_ x: inout String!) {}
someFunc(&(str?))
所以也许 Swift 在它的错误消息中错误地说明了参数的类型,而不是传递的值……或者什么?