我理解'价值类型'和'参考类型'之间的区别.我知道'Structures'是'Value Types',根据Swift文档,结构存储的所有值本身都是值类型.现在我的问题是如果我在Struct中有一个存储属性,它是一个类的实例.在这种情况下,整个班级会被复制还是仅仅是其地址?
任何帮助,将不胜感激.
它将指针复制到实例.我刚刚在操场上测试了这个.
struct MyStruct {
var instance: MyClass
}
class MyClass {
var name: String
init(name: String) {
self.name = name
println("inited \( self.name )") // Prints "inited Alex" only once
}
}
var foo = MyClass(name: "Alex") // make just one instance
var a = MyStruct(instance: foo) // make a struct that contains that instance
var b = a // copy the struct that references the instance
foo.name = "Wayne" // Update the instance
// Check to see if instance was updated everywhere.
a.instance.name // Wayne
b.instance.name // Wayne
Run Code Online (Sandbox Code Playgroud)
但不同的是,它现在是对同一对象的两个不同引用.因此,如果您将一个结构更改为另一个实例,则只为该结构挂起它.
b.instance = MyClass(name: "Vik")
// a and b no longer reference the same instance
a.instance.name // Wayne
b.instance.name // Vik
Run Code Online (Sandbox Code Playgroud)
操场是测试这些问题的好方法.当我读到这个问题时,我当然不知道答案.但现在我做:)
所以不要害怕去玩.
归档时间: |
|
查看次数: |
610 次 |
最近记录: |