Swift 继承/对象结构

标签 swift inheritance object-composition

在 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 {{{...}}}

结果表明 barbaz 是由其父对象的实例组成的对象,而不是从它们继承的对象。

这就是 XCode 渲染这些对象的方式,还是它们的结构与我期望的不一样?

最佳答案

您看到的只是默认的描述,它反射(reflect)了父类(super class)已经存在的事实。

此默认描述已在 Xcode 7 中更改。

您可以自定义它。 如果您想了解更多详细信息,您可以研究如何 reflectMirror有效。

简而言之,子类的镜像会(并且必须)跟踪父类(super class)。因此Baz在其镜像中有一个父类(super class),它是 Bar然后Bar在其镜像中有一个父类(super class)是 Foo 。 这就是为什么在 Xcode 6 中你会看到 {}每个级别的子类化的封装。

希望这有帮助

关于Swift 继承/对象结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31375983/

相关文章:

Python 3.x - 在将项目附加到列表之前运行函数

javascript - 通过对象组合保持自身属性私有(private)

C++从基类访问两个类的组合中的私有(private)成员

oracle - 是否可以在 PL/SQL 中使用对象组合?

ios - 如何在启用 sizeToFit 的情况下截断 UILabel?

ios - Swift 没有激活标签的风格替代品

swift - 为什么我无法使用 CAGradientLayer 的蒙版

ios - 删除 Realm 对象会导致一个函数崩溃,而不是另一个函数

Java泛型继承 "unchecked cast"

c# - 为从 Dictionary 派生的类启用 foreach