ios - Swift 类包含另一个类作为 var

标签 ios swift

考虑以下代码:

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.

您可以通过在这个 playground 在线复制粘贴来尝试该片段 http://online.swiftplayground.run/并运行它。

这是输出:

first
sum all is 10
last
sum all is 11

关于ios - Swift 类包含另一个类作为 var,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59810356/

相关文章:

iOS : Developing for HealthKit, DOB、高度等返回为零

ios - Swift roundf 不适用于浮点值

ios - 核心数据和 iOS 7 : Different behavior of persistent store

ios - 将 C 类型值设置为 NSMutableDictionary

ios - 使搜索栏通知 viewController 用户即将搜索

ios - 如果手机锁定,则禁用推送通知声音,否则启用

ios - 在Objective-C的NSString中存储带有特殊字符的URL字符串

c# - MVVMCross,FieldBinding 插件,iOS,代码绑定(bind)不起作用

swift - 如何从登录 View 加载选项卡栏 Controller - Swift

json - Swift 4 使用随 secret 钥解码嵌套的 JSON