[var]从继承的对象中获得不同的类类型

问题描述 投票:2回答:1

我需要通过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]

swift generics swift-protocols
1个回答
0
投票

如果要实现这种功能,则必须将类类型存储为实例变量,并使用符合AnyClassAnyObject.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
© www.soinside.com 2019 - 2024. All rights reserved.