在Swift 4.0中,以下代码无法编译:
现在我想象一下实际上
是否有其他选项可以使我的变量隐式解包,但仍然将其传递到修改可选值的函数中?我尝试了
那段代码实际上是:
var str: String!
func someFunc(_ s: inout String?) {}
someFunc(&str)
现在我想象一下实际上
str
的类型是String?
,并且Swift编译器似乎也同意:
我可以通过将变量更改为无法将不可变类型'String?'作为引用参数传递
String?
类型或将函数参数更改为(_s: inout String!)
类型来解决这个问题,但我不明白为什么要这样做。Swift似乎已经认为var str : String!
是"类型 'String?'",那么为什么它不允许我在这里传递呢?是否有其他选项可以使我的变量隐式解包,但仍然将其传递到修改可选值的函数中?
someFunc(&(str?))
,但情况变得更奇怪了——然后Swift抱怨:所以无法将不可变类型'String!'作为引用参数传递。
str
是String?
,但不能作为String?
传递,而str?
是String!
?!那段代码实际上是:
var str: String!
func someFunc(_ x: inout String!) {}
someFunc(&(str?))
也许Swift在错误信息中误将参数的类型而非传递的值进行说明……或者什么其他原因?
inout
,而是UnsafeMutablePointer
,它显然仍然存在问题...?请参见 https://dev59.com/Tarka4cB1Zd3GeqPisJZ 获取更新的问题。 - natevw