如何将通用的“CollectionType”传递给swift闭包?

时间:2015-12-16 21:00:50

标签: swift

首先,我知道这是完全错误的语法,但它说明了我想要做的事情:

    public func x(completion: CollectionType<MyClass> -> Void) {

    }

基本上,我要做的是编写一个闭包,它接受一个支持CollectionType协议的对象,并包含一组“MyClass”对象。

我不在乎它是什么样的收藏品。如果它支持CollectionType,那么我应该能够得到“第n个”对象,或枚举对象等。我已经读过你不能在关闭中传递泛型,所以这可能是不可能的。如果没有,我会很高兴听到如何做到这一点。

1 个答案:

答案 0 :(得分:3)

您可以使用采用AnyCollectionType协议的其中一种类型来删除集合的类型。例如:

class MyClass {}

func foo(completion: (AnyRandomAccessCollection<MyClass> -> Void)) {
    completion(AnyRandomAccessCollection([MyClass()]))
}

foo { collection in
    for item in collection {
        print(item)
    }
}