我有一节课:
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)
谁知道怎么做?
如果您创建协议,这将起作用,如下所示:
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)
| 归档时间: |
|
| 查看次数: |
86 次 |
| 最近记录: |