Swift中的结构值类型

Vik*_*ngh 6 ios swift ios8

我理解'价值类型'和'参考类型'之间的区别.我知道'Structures'是'Value Types',根据Swift文档,结构存储的所有值本身都是值类型.现在我的问题是如果我在Struct中有一个存储属性,它是一个类的实例.在这种情况下,整个班级会被复制还是仅仅是其地址?

任何帮助,将不胜感激.

Ale*_*yne 8

它将指针复制到实例.我刚刚在操场上测试了这个.

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)

操场是测试这些问题的好方法.当我读到这个问题时,我当然不知道答案.但现在我做:)

所以不要害怕去玩.