我之前尝试过问这个问题,但没有明确表达我的问题,所以我会在这里再试一次.我也注意到一个非常相似的声音问题,但它要求完全不同的东西.
我有以下代码:
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, B.self, C.self]
for cls in classes {
let obj = ???
}
Run Code Online (Sandbox Code Playgroud)
我想cls在循环中实例化一个类型的对象并用它做一些事情.我可能在数组中有重复项,如图所示.我应该用什么来代替???能够实例化正确的对象?
您所需要的只是一种required init创建实例的方法,该实例将在Types您希望其工作的所有内容之间共享.一个protocol保存的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")
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3158 次 |
| 最近记录: |