gpt4 book ai didi

ios - Swift 泛型 - 更改值和在 View Controller 之间传递

转载 作者:行者123 更新时间:2023-11-28 12:35:18 25 4
gpt4 key购买 nike

我想使用类型为 Any 的变量,以便将不同的类传递给 subview Controller 。例如,我可能有 table 、椅子和盘子对象。在我的 subview Controller 中,我想更改其中一个属性的值(例如 Table.legs 是 4,将其更改为 3),以便父 View Controller 能够从子 VC 中读取它。我将使用一个协议(protocol)来更新父 VC,它可以在读取更新后的对象后弹出子对象。

为了弄清楚泛型的传递是如何工作的,我在 Playground 上写了这段代码:

class Table {
var legs: Int
var material: String
init(legs: Int, material: String) {
self.legs = legs
self.material = material
}
}
var anObject: Any?

// set up the Table
let aTable = Table(legs: 4, material: "Oak")

// set anObject to be the Table
anObject = aTable

// get the object and change it
let bTable = anObject as! Table
bTable.legs = 3

// get the original object and cast it as a Table
let cTable = anObject as! Table

print(cTable.legs) // prints 3

据此我相信,我应该能够毫无问题地执行上面描述的操作,因为每当我更新引用它的变量时,原始对象引用 (anObject) 都会更新。

我的问题是 - 在采用这种方法时我应该注意哪些陷阱?看起来 swift 不会创建一个对象的副本,而是总是会创建一个指向原始对象的指针;有什么情况不成立吗?

如果这被视为一个相当基本的问题,我们深表歉意,但这对我来说都是全新的 - 非常感谢!

最佳答案

Class 如您所见,是引用类型,如果您将类的一个实例分配给一个变量,它会保留对该实例的引用(内存中的指针)而不是值副本。

Struct 是值类型,如果将结构的实例复制到另一个变量,它只是复制到变量。

关于ios - Swift 泛型 - 更改值和在 View Controller 之间传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41056900/

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