【发布时间】:2015-03-03 14:12:25
【问题描述】:
我知道为什么我会使用结构而不是类,但我如何才能最好地判断我正在使用的 API 正在使用哪个?
显然,查看头文件(或希望是文档)应该会立即明白这一点。我想知道是否有办法知道我正在使用的对象是面值的结构还是类?
【问题讨论】:
我知道为什么我会使用结构而不是类,但我如何才能最好地判断我正在使用的 API 正在使用哪个?
显然,查看头文件(或希望是文档)应该会立即明白这一点。我想知道是否有办法知道我正在使用的对象是面值的结构还是类?
【问题讨论】:
您不能从其他结构或类型继承。类可以从父类继承函数、变量和常量。
在 swift 中,结构是值类型,而类是引用类型。使用值类型可以使您的代码不易出错。
当您复制引用类型变量时,两个变量都引用内存中的同一个对象。改变其中一个变量将改变另一个。
当您复制值类型变量时,完整的变量会被复制到内存中的新位置。对其中一个副本的更改不会更改另一个副本。如果复制对象的成本很低,那么复制比共享内存要安全得多。
【讨论】:
Xcode 中的自动补全知道类型的类型:
【讨论】:
我不确定您所说的“面值”是什么意思。您可以通过使用reflect 获取对象的MirrorType 并检查MirrorType 的objectIdentifier 属性来测试对象是否是类的实例,如下所示:
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 测试版,所以我不能肯定地说),我知道它有更好的对象自省,但这确实可以解决问题。
【讨论】: