加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何在Swift中用它创建类和实例对象的数组?

发布时间:2020-12-14 05:25:57 所属栏目:百科 来源:网络整理
导读:我之前尝试过 ask this question,但没有明确表达我的问题,所以我会在这里再试一次.我也注意到 very similar sounding question,但它要求完全不同的东西. 我有以下代码: class Base { func launch(code1: Int,code2: Int) { ... }}class A: Base {}class B:
我之前尝试过 ask this question,但没有明确表达我的问题,所以我会在这里再试一次.我也注意到 very similar sounding question,但它要求完全不同的东西.

我有以下代码:

class Base {
    func launch(code1: Int,code2: Int) { ... }
}

class A: Base {}
class B: Base {}
class C: Base {}

let classes = [A.self,B.self,A.self,C.self]
for cls in classes {
    let obj = ???
}

我想在循环中实例化一个cls类型的对象,并用它做一些事情.我可能在数组中有重复项,如图所示.我怎么代替???能够实例化适当的对象?

您只需要一个必需的init,一些方法来创建一个实例,该实例将在您希望其工作的所有类型之间共享.保存init方法的协议可以正常工作.

显然,当init不需要参数时,这种方法最简单.

缺点是您需要向下转换结果实例.

protocol ZeroParamaterInit {
    init()
}

class Base : ZeroParamaterInit {
    func launch(code1: Int,code2: Int) {  }
    required init() {

    }
}

class A: Base {}
class B: Base {}
class C: Base {}

let classes : [ZeroParamaterInit.Type] = [A.self,B.self]
var instances : [Any] = []

for cls in classes {

    let instance = cls.init()
    instances.append(instance)

}

for instance in instances {

    if let test = instance as? A {
        print("A")
    }
    if let test = instance as? B {
        print("B")
    }
    if let test = instance as? C {
        print("C")
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读