繁体   English   中英

包含另一个类作为 var 的 Swift 类

[英]Swift class containing another class as var

考虑以下代码:

class A {
    var x = 0;
    var y = 0;
    init(x vx: int, y vy: int){
        x = vx
        y = vy
    }
}

class B {
    var a_array: [A]

    init(){
        a_array = []
    }

    func append(_ a:A){
        a_array.append(a)
    }

    func sum_all(){
        var sum = 0
        for a in a_array {
            sum += (a.x + a.y)
        }
        print("sum all is",sum)
    }
}

var a1 = A(1, 2)
var a2 = A(3, 4)
var b = B();
b.append(a1)
b.append(a2)
b.sum_all() //it prints out 10 correctly.

a1.x = 2
b.sum_all() //it still prints out 10

由于我希望它打印出 11,我该如何修改这些代码? 在 C 中,它可以通过使用指针引用轻松完成,在 Swift 中如何完成? 非常感谢!

它实际上是在你说它仍然打印 10 的那一行打印 11。

您可以通过修改一些代码来尝试一下,使其看起来更像 Swift 语法,如下所示:

import Foundation

class A {
    var x = 0
    var y = 0
    init(_ vx: Int, _ vy: Int){
        x = vx
        y = vy
    }
}

class B {
    var a_array: [A]

    init(){
        a_array = []
    }

    func append(_ a:A){
        a_array.append(a)
    }

    func sum_all(){
        var sum = 0
        for a in a_array {
            sum += (a.x + a.y)
        }
        print("sum all is",sum)
    }
}

var a1 = A(1, 2)
var a2 = A(3, 4)
var b = B()
b.append(a1)
b.append(a2)
print("first")
b.sum_all() //it prints out 10 correctly.

a1.x = 2
print("last")
b.sum_all() //it actually prints 11.

您可以通过将其复制粘贴到此在线游乐场http://online.swiftplayground.run/并运行它来尝试该代码段。

这是输出:

first
sum all is 10
last
sum all is 11

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM