我们无法将nil传递给inout param,是否有一种简洁明了的方法可以动态创建一个空的对象文字并为此传递给它,
让我们说有时当我们没有任何东西要通过时,想要传递一个空数组,一个空字典或类文字对象,在下面的例子中它会如何工作?
func test(inout param: Any) {
println(param)
}
//呼叫
test(&[]())
编辑 - inout with nil works
func test(inout param: Any?) {
println(param)
}
var p: Any? = nil
test(&p)
答案 0 :(得分:0)
有许多事情在这里不起作用。
您需要提供超过[]
的声明数组。你需要给出一些元素类型的指示。在括号中,例如[Int]()
或其他上下文,即test
[Int]
arg而不是Any
。否则,编译器不知道[]
的含义是什么类型。
您无法将文字(例如nil
)传递到inout
参数中。实际上,您无法传递任何类型的不可变值,包括[Int]()
等临时对象或使用let
声明的变量。您可以传递给inout
参数的唯一内容是“左值” - 也就是说,可以在赋值的左侧。这意味着即使你把它改成`test(& Int)也不行。
最后,即使您声明var a = [Int]()
然后尝试调用test(&a)
,您也会收到错误,因为a
从数组到Any
的隐式副本将导致另一个不可变的临时,它也不能作为inout
传递。