我正在使用Swift Xcode 6.2,并且无法理解Swift指针的工作方式。
所以我有两个类,其中我有相互调用的函数。我想将类A中的字典传递给B类,对B类中的字典进行一些更改,然后从A类中回调函数。
我们假设我们有一些虚拟代码如下:
Class A {
var airports: [String: String] = ["YYZ": "Toronto Pearson", "DUB": "Dublin"]
func foo() {
B.bar(&airports);
}
func foo2() {
println(airports["CCU"]);
}
}
不同的档案:
class B {
func bar(inout dict : [String: String]) {
dict["CCU"] = "Kolkata";
A.foo2();
}
}
根据命令流程,上面应该打印"加尔各答"但是在这种情况下获得的值为零。
这是否意味着Swift跟随Copy on Write并在整个函数执行完后解析指针?如果是的话,围绕它的最佳方法是什么,为字典编写包装类?
答案 0 :(得分:0)
在类A中声明类B的实例变量,然后在类A中使用类B的'bar'方法。 Same Way在B类中声明CLass A的Instance变量,然后开始使用它。否则通过这种格式类func foo(){...}
将所有三个函数作为类函数答案 1 :(得分:0)
您正在使用的技术是通过引用传递,并且是通过将引用传递给另一个函数来修改变量值的正确方法。
略微修改您的代码,您可以看到它正常工作。
class A {
var airports: [String: String] = ["YYZ": "Toronto Pearson", "DUB": "Dublin"]
func foo() {
B().bar(&airports);
foo2()
}
func foo2() {
print(airports["CCU"]);
}
}
class B {
func bar(inout dict : [String: String]) {
dict["CCU"] = "Kolkata";
}
}
A().foo()