2015-12-16 27 views
3

首先,我知道,這是完全錯誤的語法,但它說明了什麼我想做的事:如何將通用的「CollectionType」傳遞給swift閉包?

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

    } 

基本上,我想要做的就是寫一個封閉,這需要一個對象,它支持CollectionType協議,幷包含「MyClass」對象的集合。

我不在乎它是什麼樣的集合。如果它支持CollectionType,那麼我應該能夠獲得「第n個」對象,或者通過對象枚舉等等。我已經讀過,你不能在閉包中傳遞泛型,所以這可能是不可能的。如果沒有,我很樂意聽到如何去做。

回答

3

您可以使用採用AnyCollectionType協議的類型中的一種來擦除集合的類型。例如:

class MyClass {} 

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

foo { collection in 
    for item in collection { 
     print(item) 
    } 
} 
相關問題