繁体   English   中英

Swift泛型-更改值并在视图控制器之间传递

[英]Swift Generics - Changing Values and Passing Between View Controllers

我想使用类型为Any的变量,以便将不同的类传递给子视图控制器。 例如,我可能有桌子,椅子和盘子对象。 在我的子视图控制器中,我想更改其属性之一的值(例如Table.legs为4,将其更改为3),并使父视图控制器能够从子VC读取该值。 我将使用协议来更新可读取子对象后弹出子代的父VC。

为了弄清楚泛型的传递可能如何工作,我在操场上编写了以下代码:

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是值类型,如果将结构的实例复制到另一个变量,则它只是复制到该变量。

暂无
暂无

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

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