objective-c - 如何在 Swift 中返回实例类型

标签 objective-c swift

我想扩展一些类来返回运行时类型对象

例如,我创建类 A 的扩展

extension A {
    class func niceObject() -> XXXXX { // in objective-c is instancetype
        return ....
    }
}

所以任何人都知道 Swift 中有 instancetype 关键字或不替换 xxxxx 并且我可以在 A 的子类上调用此函数而无需手动转换

var b: B = B.niceObject()

谢谢

最佳答案

你可以做到。下面的 Playground 代码。 niceObject() 必须返回的是 self()。此外,您必须在基类上有一个 required init。

class A {
    required init() {
    }

    func whatClassAmI() -> String {
        return "Class A"
    }
}

class B: A {
    required init() {
        super.init()
    } 
    override func whatClassAmI() -> String {
        return "Class B"
    }
}

let a = A()
let sa = a.whatClassAmI() // "Class A", of course

let b = B()
let sb = b.whatClassAmI() // "Class B", of course

extension A {
    class func niceObject() -> Self {
        return self.init()
    }
}

let aa = A.niceObject()
let saa = aa.whatClassAmI() // "Class A"

let bb = B.niceObject()
let sbb = bb.whatClassAmI() // "Class B", as required

关于objective-c - 如何在 Swift 中返回实例类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24180768/

相关文章:

ios - 如何从 TabBar Controller 禁用滑动手势识别器

swift - 如何在 Swift 中编写一个空案例?

ios - 在 Swift 中为一个 tabBarItem 设置 tintColor

ios - 部分屏幕截图和图像质量损失

ios - 子类化 UIView 是处理未知数量的这些自定义对象的正确方法吗?

ios - 如何在 Interface builder 的 UIView 中正确添加带有原型(prototype)单元的 UITableView?

swift - AppleWatch 语音转文本功能不起作用

ios - 在转换前检查 String 是否有货币符号

objective-c - 将贝塞尔曲线路径添加到CGPath : ObjectiveC

objective-c - 自定义 View 中的 mouseDown 事件不显示正确的单击坐标