Swift中的指针和inout应该以这种方式工作吗?

时间:2015-07-28 03:33:56

标签: swift dictionary

我正在使用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并在整个函数执行完后解析指针?如果是的话,围绕它的最佳方法是什么,为字典编写包装类?

2 个答案:

答案 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()