Swift:如何遍历泛型类的实例数组

uki*_*kim 0 swift

我有一节课:

class MyClass<T> {
    func whoAreYou() {
        print("I am \(T.self)")
    }
}
Run Code Online (Sandbox Code Playgroud)

我创建了两个实例:

let a = MyClass<Int>()
let b = MyClass<Double>()
Run Code Online (Sandbox Code Playgroud)

我想把它们放在一个数组中并迭代它们,但我没有做到.我试过了:

// not working
let objects: [MyClass<Any>] = [a as! MyClass<Any>, b as! MyClass<Any>]
for object in objects {
    object.whoAreYou()
}
Run Code Online (Sandbox Code Playgroud)

我也尝试过:

// not working
for object in [a, b] {
    object.whoAreYou()
}
Run Code Online (Sandbox Code Playgroud)

谁知道怎么做?

Cod*_*ton 5

如果您创建协议,这将起作用,如下所示:

protocol Identifiable {
    func whoAreYou()
}
Run Code Online (Sandbox Code Playgroud)

然后,使您的类符合您创建的协议:

class MyClass<T>: Identifiable {
    func whoAreYou() {
        print("I am \(T.self)")
    }
}
Run Code Online (Sandbox Code Playgroud)

创建类的实例:

let a = MyClass<Int>()
let b = MyClass<Double>()
Run Code Online (Sandbox Code Playgroud)

稍后在您的代码中:

for object in [a, b] as [Identifiable] {
    object.whoAreYou()
}
Run Code Online (Sandbox Code Playgroud)

或这个:

let objects: [Identifiable] = [a, b]

for object in objects {
    object.whoAreYou()
}
Run Code Online (Sandbox Code Playgroud)