如何在Swift中获取对父/超类的引用?

时间:2015-10-29 01:42:59

标签: ios swift

在Swift中你可以创建继承:

class A {

}

class B:A {

}

在此示例中,B继承自A。如果我在B中创建一个函数,有没有办法可以引用它的超类A?我在想它会是这样的:

self.super

self.super()

或者

self.parent

我尝试了所有这些,但没有一个适合我。有谁知道如何获得对超类的引用?

5 个答案:

答案 0 :(得分:2)

一个纯 Swift 版本,它可以在 Linux 上运行,但依赖于一个不太官方的 API:

class A {}
class B: A {}

let superclass = Swift._getSuperclass (B.self)
print ("\(superclass)")

感谢 gwynne-raskind 的帮助!

答案 1 :(得分:1)

您需要导入Objective-C运行时,然后才能使用class_getSuperclass()

import ObjectiveC

class A {}

class B:A {
    func mySuper() -> AnyClass {
        return class_getSuperclass(self.dynamicType)
    }
}

B().mySuper() // A.Type

除了调试和日志记录之外,这对于其他任何事情都是不太可能的。即使这样,它也非常不像Swift,你应该在追求它之前深入重新思考你的问题。甚至像这样的子类也非常不像Swiftlike。协议和扩展几乎总是比纯Swift中的继承更好的解决方案(没有继承,不需要担心超类)。

答案 2 :(得分:0)

class A {
    func f() {
        print("A")
    }
}
class B : A {
    override func f() {
        print("B")
        super.f()
    }
}
let b = B()
b.f()

答案 3 :(得分:0)

class A {
    var type: AnyClass { return A.self }
}

class B : A {
    override var type: AnyClass { return B.self }
    var superType: AnyClass { return super.type}
}

let type = B().type
let superType = B().superType

答案 4 :(得分:0)

鉴于课程AB,我可以在导入self.superclass后在B内致电ObjectiveC