Bin*_*ian 5 reference parameter-passing swift2
我知道什么inout是价值类型.
对于对象或任何其他引用类型,在这种情况下,该关键字是否有用,而不是使用var?
private class MyClass {
private var testInt = 1
}
private func testParameterObject(var testClass: MyClass) {
testClass.testInt++
}
private var testClass: MyClass = MyClass()
testParameterObject(testClass)
testClass.testInt // output ~> 2
private func testInoutParameterObject(inout testClass: MyClass) {
testClass.testInt++
}
testClass.testInt = 1
testInoutParameterObject(&testClass) // what happens here?
testClass.testInt // output ~> 2
Run Code Online (Sandbox Code Playgroud)
它可以var与参数列表中的关键字相同.
不同之处在于,当您将by-reference参数作为a传递时var,您可以自由更改传递对象内可以更改的所有内容,但是您无法更改完全不同的对象.
这是一个代码示例,说明了这一点:
class MyClass {
private var testInt : Int
init(x : Int) {
testInt = x
}
}
func testInoutParameterObject(inout testClass: MyClass) {
testClass = MyClass(x:123)
}
var testClass = MyClass(x:321)
println(testClass.testInt)
testInoutParameterObject(&testClass)
println(testClass.testInt)
Run Code Online (Sandbox Code Playgroud)
这里,里面的代码testInoutParameterObject将一个全新的MyClass对象设置testClass为传递给它的变量.在Objective-C术语中,这松散地对应于将指针传递给指针(两个星号)而不是传递指针(一个星号).