在 XCode 中将以下复杂对象层次结构定义到 Playground 中:
class Foo {
var name: String
required init(name: String) {
self.name = name
}
}
class Bar: Foo {
}
class Baz: Bar {
}
创建这些类的实例会产生令人困惑的结果:
var foo = Foo(name: "Hello") // renders as {name: "Hello"}
var bar = Bar(name: "Hello") // renders as {{name: "Hello"}}
var baz = Baz(name: "Hello") // renders as {{{...}}}
结果表明 bar
和 baz
是由其父对象的实例组成的对象,而不是从它们继承的对象。
这就是 XCode 渲染这些对象的方式,还是它们的结构与我期望的不一样?
最佳答案
您看到的只是默认的描述,它反射(reflect)了父类(super class)已经存在的事实。
此默认描述已在 Xcode 7 中更改。
您可以自定义它。
如果您想了解更多详细信息,您可以研究如何 reflect
和Mirror
有效。
简而言之,子类的镜像会(并且必须)跟踪父类(super class)。因此Baz
在其镜像中有一个父类(super class),它是 Bar
然后Bar
在其镜像中有一个父类(super class)是 Foo
。
这就是为什么在 Xcode 6 中你会看到 {}
每个级别的子类化的封装。
希望这有帮助
关于Swift 继承/对象结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31375983/