在Swift中,您可以创建继承:
class A { } class B:A { }
在这个例子中,B继承自A。如果我在B中创建一个函数,有没有办法获得对它的超类A的引用?我想应该是这样的:
B
A
self.super
或者
self.super()
self.parent
我尝试了所有这些方法,但没有一个对我有效。有人知道如何获得对超类的引用吗?
agyaoht71#
一个纯Swift版本,它可以在Linux上运行,但是依赖于一个非官方的API:
class A {} class B: A {} let superclass = Swift._getSuperclass (B.self) print ("\(superclass)")
感谢gwynne-raskind的帮助!
lp0sw83n2#
您需要导入Objective-C运行时,然后就可以使用class_getSuperclass()了。
class_getSuperclass()
import ObjectiveC class A {} class B:A { func mySuper() -> AnyClass { return class_getSuperclass(self.dynamicType) } } B().mySuper() // A.Type
除了调试和日志记录之外,这几乎不可能是一个好主意。即使这样,它也非常不像Swift,在继续它之前,你应该深入思考你的问题。甚至像这样的子类化也非常不像Swift。在纯Swift中,协议和扩展几乎总是比继承更好的解决方案(没有继承,就没有必要担心超类)。
yxyvkwin3#
给定类A:B,我可以在导入ObjectiveC后在B中调用self.superclass。
ObjectiveC
self.superclass
1tu0hz3e4#
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
n7taea2i5#
class Smiley {} class EmojiSmiley: Smiley {} func printSuperClassInfo<T>(_ value: T) { if let superClass: AnyClass = class_getSuperclass(type(of: value) as? AnyClass) { print("superClass: ", superClass) } } let emojiSmiley = EmojiSmiley() printSuperClassInfo(emojiSmiley)
输出:父类型:笑脸
c3frrgcw6#
class A { func f() { print("A") } } class B : A { override func f() { print("B") super.f() } } let b = B() b.f()
6条答案
按热度按时间agyaoht71#
一个纯Swift版本,它可以在Linux上运行,但是依赖于一个非官方的API:
感谢gwynne-raskind的帮助!
lp0sw83n2#
您需要导入Objective-C运行时,然后就可以使用
class_getSuperclass()
了。除了调试和日志记录之外,这几乎不可能是一个好主意。即使这样,它也非常不像Swift,在继续它之前,你应该深入思考你的问题。甚至像这样的子类化也非常不像Swift。在纯Swift中,协议和扩展几乎总是比继承更好的解决方案(没有继承,就没有必要担心超类)。
yxyvkwin3#
给定类
A
:B
,我可以在导入ObjectiveC
后在B
中调用self.superclass
。1tu0hz3e4#
n7taea2i5#
输出:父类型:笑脸
c3frrgcw6#