Array上的扩展,其中element是Swift中的泛型结构

时间:2017-08-07 17:30:12

标签: swift generics

如何扩展具有泛型类型的结构数组?请参阅以下代码,了解我要做的事情。

struct MyStruct<T: MyProtocol> {
   ...
}

extension Array where Element: MyStruct<T> { // Not sure if T is supposed to be on this line.

    func doWork() -> [T] {
        ...
    }
}

基本上,我如何编写扩展以使方法返回传递给结构的泛型类型的数组。

1 个答案:

答案 0 :(得分:4)

您需要创建一个具有关联类型的协议:

protocol MyGenericStructProtocol {
    associatedtype GenericType
}

让你的结构直接采用协议,或使用扩展名:

extension MyStruct: MyGenericStructProtocol {
    typealias GenericType = T
}

现在您可以在Array扩展名中引用泛型类型:

extension Array where Element: MyGenericStructProtocol {
    func doWork() -> [Element.GenericType] {
        return []
    }
}

查看this GitHub gist

上的完整工作示例