在Swift中你可以创建继承:
class A {
}
class B:A {
}
在此示例中,B
继承自A
。如果我在B中创建一个函数,有没有办法可以引用它的超类A
?我在想它会是这样的:
self.super
或
self.super()
或者
self.parent
我尝试了所有这些,但没有一个适合我。有谁知道如何获得对超类的引用?
答案 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)
鉴于课程A
:B
,我可以在导入self.superclass
后在B
内致电ObjectiveC
。