swift - Array 上的扩展,其中元素是 Swift 中的通用结构

标签 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] {
        ...
    }
}

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

最佳答案

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

protocol MyGenericStructProtocol {
    associatedtype GenericParameter
}

让您的结构采用协议(protocol),直接或使用扩展:

extension MyStruct: MyGenericStructProtocol {
    typealias GenericParameter = T
}

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

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

this GitHub gist 上查看完整的工作示例

关于swift - Array 上的扩展,其中元素是 Swift 中的通用结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45552561/

相关文章:

ios - 在 iOS Swift 上从网络加载 MVVM 异步 UIImage

ios - 在搜索栏外单击时使键盘消失 - SWIFT

ios - 如何以特定顺序显示数组中的项目?

swift - 获取用于创建 SCNNode 的 SCNSphere 的半径

java - 具有复杂泛型的 SWT 监听器

swift - 将图像保存到核心数据中并将其提取到表格 View 单元格中

java - 无法访问 ArrayList 的 ArrayList(通用)

java - 无法弄清楚如何实例化从具有 <S, T extends S> 等条件的函数返回的泛型类

java - 将泛型类的子类分配给此类的父类(super class)

java - 重写泛型类的方法时发生名称冲突