区分 Swift 中的结构和 Class

Differentiating Between a Struct and a Class in Swift

我知道为什么我会使用结构而不是 class,但是我如何才能最好地分辨出我正在使用的 API 正在使用哪个结构?

显然,查看头文件(或希望是文档)应该会立即显而易见。我想知道是否有办法知道我使用的对象是结构还是面值 class?

Xcode 中的自动完成知道类型的类型:

我不确定 "face-value" 是什么意思。您可以通过使用 reflect 获取对象 MirrorType 并检查 MirrorTypeobjectIdentifier [= 来测试对象是否是 class 的实例23=],像这样:

struct TestStruct { }
class TestClass { }

let testStruct = TestStruct()
let testClass = TestClass()

if let x = reflect(testStruct).objectIdentifier {
    println("I am a class...")
} else {
    println("I am not a class...")    // prints "I am not a class..."
}

if let x = reflect(testClass).objectIdentifier {
    println("I am a class...")        // prints "I am a class..."
} else {
    println("I am not a class...")
}

这个答案可能会随着 Swift 1.2 即将发布而过时(我没有新的 xCode beta,所以我不能肯定地说),据我所知有更好的对象自省,但这确实可以解决问题。

您不能从其他结构或类型继承。 类 能够从父 类.

继承函数、变量和常量

在 swift 中,结构是值类型,而 类 是引用类型。使用值类型可以使您的代码更不容易出错。

复制引用类型变量时,两个变量都引用内存中的同一个对象。对其中一个变量的更改将更改另一个变量。

复制值类型变量时,会将整个变量复制到内存中的新位置。对其中一个副本的更改不会更改另一个副本。如果一个对象的复制是便宜的,那么制作一个副本比共享内存要安全得多。