区分 Swift 中的结构和 Class
Differentiating Between a Struct and a Class in Swift
我知道为什么我会使用结构而不是 class,但是我如何才能最好地分辨出我正在使用的 API 正在使用哪个结构?
显然,查看头文件(或希望是文档)应该会立即显而易见。我想知道是否有办法知道我使用的对象是结构还是面值 class?
Xcode 中的自动完成知道类型的类型:
我不确定 "face-value" 是什么意思。您可以通过使用 reflect
获取对象 MirrorType
并检查 MirrorType
的 objectIdentifier
[= 来测试对象是否是 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 中,结构是值类型,而 类 是引用类型。使用值类型可以使您的代码更不容易出错。
复制引用类型变量时,两个变量都引用内存中的同一个对象。对其中一个变量的更改将更改另一个变量。
复制值类型变量时,会将整个变量复制到内存中的新位置。对其中一个副本的更改不会更改另一个副本。如果一个对象的复制是便宜的,那么制作一个副本比共享内存要安全得多。
我知道为什么我会使用结构而不是 class,但是我如何才能最好地分辨出我正在使用的 API 正在使用哪个结构?
显然,查看头文件(或希望是文档)应该会立即显而易见。我想知道是否有办法知道我使用的对象是结构还是面值 class?
Xcode 中的自动完成知道类型的类型:
我不确定 "face-value" 是什么意思。您可以通过使用 reflect
获取对象 MirrorType
并检查 MirrorType
的 objectIdentifier
[= 来测试对象是否是 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 中,结构是值类型,而 类 是引用类型。使用值类型可以使您的代码更不容易出错。
复制引用类型变量时,两个变量都引用内存中的同一个对象。对其中一个变量的更改将更改另一个变量。
复制值类型变量时,会将整个变量复制到内存中的新位置。对其中一个副本的更改不会更改另一个副本。如果一个对象的复制是便宜的,那么制作一个副本比共享内存要安全得多。