如何在Swift中返回instancetype [英] How can I return instancetype in Swift

查看:355
本文介绍了如何在Swift中返回instancetype的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想扩展某些类以返回运行时类型对象

I want to make an extension of some class to return the runtime type object

例如,我创建了A类的扩展

for example, I create extenstion of class A

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

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

So anyone know there is instancetype keyword in Swift or not to replace xxxxx and I can call this function on subclass of A without manually cast

var b: B = B.niceObject()

谢谢

推荐答案

您可以做到.下面的游乐场代码. niceObject()必须返回的是self().此外,您必须在基类上具有required初始化.

You can do it. Playground code below. It's self() that niceObject() has to return. Additionally, you must have a required init on the base class.

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

这篇关于如何在Swift中返回instancetype的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆