Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift:如何遍历泛型类的实例数组_Swift - Fatal编程技术网

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

Swift:如何遍历泛型类的实例数组,swift,Swift,我有一门课: class-MyClass{ 你是谁{ 打印(“我是\(T.self)”) } } 我创建了两个实例: a=MyClass() 设b=MyClass() 我想把它们放在一个数组中,并对它们进行迭代,但没有成功。我试过: //不工作 let对象:[MyClass]=[a as!MyClass,b as!MyClass] 对于对象中的对象{ 反对你是谁 } 我还尝试: //不工作 对于[a,b]中的对象{ 反对你是谁 } 有人知道怎么做吗?如果您创建一个协议,这将起作用,如下所

我有一门课:

class-MyClass{
你是谁{
打印(“我是\(T.self)”)
}
}
我创建了两个实例:

a=MyClass()
设b=MyClass()
我想把它们放在一个数组中,并对它们进行迭代,但没有成功。我试过:

//不工作
let对象:[MyClass]=[a as!MyClass,b as!MyClass]
对于对象中的对象{
反对你是谁
}
我还尝试:

//不工作
对于[a,b]中的对象{
反对你是谁
}

有人知道怎么做吗?

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

protocol Identifiable {
    func whoAreYou()
}
然后,使您的类符合您创建的协议:

class MyClass<T>: Identifiable {
    func whoAreYou() {
        print("I am \(T.self)")
    }
}
或者这个:

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

for object in objects {
    object.whoAreYou()
}

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

protocol Identifiable {
    func whoAreYou()
}
然后,使您的类符合您创建的协议:

class MyClass<T>: Identifiable {
    func whoAreYou() {
        print("I am \(T.self)")
    }
}
或者这个:

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

for object in objects {
    object.whoAreYou()
}

定义“不工作”。您的代码究竟以什么方式不起作用?使用特定的细节更新您的问题,例如错误消息(如果有)。这是您认识到协议威力的地方。:)您似乎认为泛型是多态的——从技术上讲,它们在参数化类型上是协变的。事实并非如此。因此,
MyClass
并不以某种方式接受
MyClass
。它们是不同的类型。定义“不工作”。您的代码究竟以什么方式不起作用?使用特定的细节更新您的问题,例如错误消息(如果有)。这是您认识到协议威力的地方。:)您似乎认为泛型是多态的——从技术上讲,它们在参数化类型上是协变的。事实并非如此。因此,
MyClass
并不以某种方式接受
MyClass
。它们是不同的类型。