我需要通过var
从继承的对象中获得不同的类类型。我需要这些对象不是通用的。像这样的东西
import Foundation
protocol MyClassProtocol {
associatedtype MyClass: Any
var myClass: MyClass.Type { get }
}
extension MyClassProtocol {
var myClass: MyClass.Type {
get { Self.MyClass.self }
}
}
class A: MyClassProtocol {
typealias MyClass = String
}
class B: A {
typealias MyClass = Int64
}
let a = A().myClass // String.Type
let a1 = A.MyClass.self // String.Type
let b = B().myClass // String.Type
let b1 = B.MyClass.self // Int64.Type
let list: [A] = [A(),B()]
// any way, how i get from this list different classes?
let la = list[0].myClass // String.Type
let la1 = type(of: list[0]).MyClass.self // String.Type
let lb = list[1].myClass // String.Type
let lb1 = type(of: list[1]).MyClass.self // String.Type
我该如何解决?我无法使用通用,因为我有array: [A]
如果要实现这种功能,则必须将类类型存储为实例变量,并使用符合AnyClass
或AnyObject.Type
的类类型,如下所示:
protocol MyClassProtocol {
var myClass: AnyClass { get }
}
class A: MyClassProtocol {
var myClass: AnyClass { return NSString.self }
}
class B: A {
override var myClass: AnyClass { return NSNumber.self }
}
var list: [MyClassProtocol] = [A(), B()]
print(String(describing: list[0].myClass.self)) // NSString
print(String(describing: list[1].myClass.self)) // NSNumber