gpt4 book ai didi

swift:通过引用传递

转载 作者:行者123 更新时间:2023-11-30 10:02:21 25 4
gpt4 key购买 nike

来自 JS,并尝试在 swift 中通过引用传递 [JSON],这是不可能的,所以我尝试将其包装在对象中,并使用原语做了一个简单的示例,但仍然不起作用,我如何包装成员 a,以便引用对象 a 的更改影响 b ?谢谢

class ExampleA {
var a = 0
init(a: Int) {
self.a = a
}
}
class ExampleB {
var a = 0
init(a: Int) {
self.a = a
}
func process(inout p: ExampleA) {
self.a = p.a
print(p.a)
}
}

var a = ExampleA(a: 15)
var b = ExampleB(a: 10)

b.process(&a)

print(b.a) // "15\n"
a.a = 25 // this does nothing to b????
print(b.a) // "15\n"

最佳答案

您的示例失败,因为 a 是一个 Int,它是一种值类型。

当您执行赋值操作 self.a = p.a 时,您正在制作 Int 的副本。

要实现您想要的引用语义,您必须引用存储值类型的ExampleA。我认为您因变量命名而感到困惑,将 ExampleAa : Int 成员与名为 a< 的 ExampleA 实例混淆.

这是我整理的修复程序。它为 ExampleB 提供了一个计算属性,可以透明地访问 ExampleA 中的data

class ExampleA {
var data = 0
init(data: Int) {
self.data = data
}
}

class ExampleB {
var a : ExampleA

var data : Int {
get {
return a.data
}
set {
a.data = newValue
}
}

init(data: Int) {
self.a = ExampleA(data: data)
}

func process(a: ExampleA) {
self.a = a
print(a.data)
}
}

var a = ExampleA(data: 15)
var b = ExampleB(data: 10)

b.process(a: a)

print(b.data) // "15\n"
a.data = 25
print(b.data) // "25\n"

关于swift:通过引用传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37756087/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com