首页 > 解决方案 > Swift 扩展 - 必须在非专用泛型类型“数组”上声明约束扩展

问题描述

我有一个返回 JSON 对象数组的 API。我已将结构设置为如下所示:

typealias MyModels = [MyModel]

struct MyModel: Codable {
    let field1: String
    let field2: String
    let mySubModel: SubModel?
    
    enum CodingKeys: String, CodingKey {
        case field1 = "Field1"
        case field2 = "Field2"
        case mySubModel = "MySubModel"
    }
}

struct SubModel: Codable {
    let subModelField1: String
    let subModelField2: String
    
    enum CodingKeys: String, CodingKey {
        case subModelField1 = "SubModelField1"
        case subModelField2 = "SubModelField2"
    }
}

我想要做的是添加这个扩展,提供一个路径变量(NetworkModel 协议为 API 操作提供了一些基本功能):

extension MyModels: NetworkModel {
    static var path = "the/endpoint/path"
}

当基础是对象或 json 键时,我以这种方式设置的其他模型/结构类没有任何问题。但是,由于这个不同并且只是一个数组,因此当我将该扩展名放入类中时会出现此错误:

约束扩展必须在非特化泛型类型“数组”上声明,约束由“where”子句指定

我已经做了一些挖掘并尝试了一些关于扩展的 where 子句的事情,但我对它想要什么感到有点困惑。我敢肯定这很简单,但是对此有什么想法吗?如果我需要使用上面的 typealias 以不同的方式处理它,我可以接受。提前致谢!

标签: iosswiftcollectionsswift-extensionstype-alias

解决方案


我假设你的意思是

extension MyModels: NetworkModel {

有错误吗?你似乎错过了s那里。

该错误基本上是告诉您这样做:

extension Array : NetworkModel where Element == MyModel {
    static var path = "the/endpoint/path"
}

您不能简单地扩展[MyModel].


推荐阅读