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

txu3uszq  于 2022-11-26  发布在  iOS
关注(0)|答案(6)|浏览(232)

在Swift中,您可以创建继承:

class A {

}

class B:A {

}

在这个例子中,B继承自A。如果我在B中创建一个函数,有没有办法获得对它的超类A的引用?我想应该是这样的:

self.super

或者

self.super()

或者

self.parent

我尝试了所有这些方法,但没有一个对我有效。有人知道如何获得对超类的引用吗?

agyaoht7

agyaoht71#

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

class A {}
class B: A {}

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

感谢gwynne-raskind的帮助!

lp0sw83n

lp0sw83n2#

您需要导入Objective-C运行时,然后就可以使用class_getSuperclass()了。

import ObjectiveC

class A {}

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

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

除了调试和日志记录之外,这几乎不可能是一个好主意。即使这样,它也非常不像Swift,在继续它之前,你应该深入思考你的问题。甚至像这样的子类化也非常不像Swift。在纯Swift中,协议和扩展几乎总是比继承更好的解决方案(没有继承,就没有必要担心超类)。

yxyvkwin

yxyvkwin3#

给定类AB,我可以在导入ObjectiveC后在B中调用self.superclass

1tu0hz3e

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
n7taea2i

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)

输出:父类型:笑脸

c3frrgcw

c3frrgcw6#

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

相关问题