如何使用 AnyClass 在 swift3.x 中初始化特定的 class 实例
How to use AnyClass to init an specific class instance in swift3.x
I have seen this question on Whosebug Here Unfortunately, this answer is not helpful in swift3.x
protocol Effect {
func des()
}
class A: Effect {
func des() {
print("This is A")
}
required init() { }
}
class B: Effect {
func des() {
print("This is B")
}
required init() { }
}
我想将 class A 和 B 存储在一个数组中
var array = [Effect.Type]()
array.append(A.self)
array.append(B.self)
当我想从数组中得到class A & B时,我得到了这个结果
A.self // __lldb_expr_23.A.Type
A.self.init().des() -> This i A
array[0] // __lldb_expr_23.A.Type
array[0].init().des() -> Error
Error Image
我知道我可以用这个方法初始化Class A
let a = array[0] as! A.Type
a.init().des() -> This is class A
但是如果我不确切地知道 class,我就无法通过 Effect.Type 初始化 class
那么如何使用 AnyClass 来初始化特定的 class 实例而不使用 as! ...在 Swift3.x?
您必须添加 init()
作为协议定义的要求
为了在 Effect.Type
:
类型的数组值上调用它
protocol Effect {
init()
func des()
}
然后一切正常:
let array: [Effect.Type] = [ A.self, B.self ]
array[0].init().des() // This is A
array[1].init().des() // This is B
I have seen this question on Whosebug Here Unfortunately, this answer is not helpful in swift3.x
protocol Effect {
func des()
}
class A: Effect {
func des() {
print("This is A")
}
required init() { }
}
class B: Effect {
func des() {
print("This is B")
}
required init() { }
}
我想将 class A 和 B 存储在一个数组中
var array = [Effect.Type]()
array.append(A.self)
array.append(B.self)
当我想从数组中得到class A & B时,我得到了这个结果
A.self // __lldb_expr_23.A.Type
A.self.init().des() -> This i A
array[0] // __lldb_expr_23.A.Type
array[0].init().des() -> Error
Error Image
我知道我可以用这个方法初始化Class A
let a = array[0] as! A.Type
a.init().des() -> This is class A
但是如果我不确切地知道 class,我就无法通过 Effect.Type 初始化 class 那么如何使用 AnyClass 来初始化特定的 class 实例而不使用 as! ...在 Swift3.x?
您必须添加 init()
作为协议定义的要求
为了在 Effect.Type
:
protocol Effect {
init()
func des()
}
然后一切正常:
let array: [Effect.Type] = [ A.self, B.self ]
array[0].init().des() // This is A
array[1].init().des() // This is B