Swift类型在通用约束下不符合协议错误,但在类本身不符合协议错误

所以

我在这里弄清楚整个事情有些麻烦。从代码开始:

实体:

protocol EntityProtocol : class {
    var id: String { get set }
    var version: String { get }
    var deleted: Bool { get set }
    var uid: String { get set }
    func Validate() -> [String: String]
}
extension EntityProtocol {
    var version: String {
        get { return "v0.0" }
        set { }
    }
    func Validate() -> [String: String]{
        //some default checking for default fields
    }
}
typealias Entity = EntityProtocol & Codable

产品:

class Product: Entity {
    var id: String = ""
    var deleted: Bool
    var uid: String = ""

    func Validate() -> [String : String] {
      //implementation
    }
}

到目前为止,编译时没有错误...然后,我有class Repository<TEntity> where TEntity: Entity一个实现实际存储库功能的基类...

现在,当我执行class ProductRepo<Product> : Repository<Product>操作时,这里显示错误,Type 'Product' does not conform to protocol 'EntityProtocol'但是Product类本身仍然没有错误。

PS:我尝试将version字段添加到产品中,仍然是同样的错误。我使用协议而不是具有继承性的类的原因是Codable不能被继承,必须自己编写init并进行序列化。

任何人都可以告诉我为什么会这样以及如何解决?我很困惑,如果Product不符合协议,那么为什么编译器不会在Product类本身中抱怨呢?

牧羊人大卫

您的ProductRepo声明缺少对的类型约束Product您需要向其添加Entity约束以使其符合Repository

class ProductRepo<Product: Entity> : Repository<Product> {
    
}

与您的问题无关,但是无需将其Entity作为类型别名,您只需使其EntityProtocol符合即可Codable另外,对于version默认实现,由于协议仅需要getter,因此无需添加空的setter。

protocol Entity: class, Codable {
    var id: String { get set }
    var version: String { get }
    var deleted: Bool { get set }
    var uid: String { get set }
    func validate() -> [String: String]
}

extension Entity {
    var version: String {
        "v0.0"
    }
    
    func validate() -> [String: String]{
        [:]
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Swift类型在通用约束下不符合协议错误,但在类本身不符合协议错误

来自分类Dev

Swift数组标识“类型不符合协议'AnyObject'”错误

来自分类Dev

类型不符合协议

来自分类Dev

类型()不符合协议

来自分类Dev

类不符合协议

来自分类Dev

类不符合协议

来自分类Dev

Swift不符合协议

来自分类Dev

Swift:类型不符合协议“ ArrayLiteralConvertible”

来自分类Dev

Swift:类型不符合协议

来自分类Dev

Swift类型不符合协议NilLiteralConvertible

来自分类Dev

类型不符合协议Swift

来自分类Dev

Swift 类不符合 Enum 协议

来自分类Dev

输入“ MyError?” 不符合协议“错误”

来自分类Dev

类型[SubscriptType]不符合协议StringLiteralConvertible错误

来自分类Dev

快速错误类型“ T”不符合协议“ IntegerLiteralConvertible”

来自分类Dev

错误:类型“ GearViewController”不符合协议“ UIPickerViewDataSource”

来自分类Dev

类型'()'不符合协议'布尔类型'

来自分类Dev

类型'Int'不符合协议'BooleanType'?

来自分类Dev

类型UITableView不符合协议IntervalType

来自分类Dev

类型“ ViewController”不符合协议“ UITableViewDataSource”

来自分类Dev

类型“ AnyObject”不符合协议“ SequenceType”

来自分类Dev

类型枚举不符合协议“ CollectionType”

来自分类Dev

类型“ Int”不符合协议“ BooleanType”

来自分类Dev

为什么类型不符合协议?

来自分类Dev

类型“ T”不符合协议“ EntityType”

来自分类Dev

类型“ AnyObject”不符合协议“ NSFetchRequestResult”

来自分类Dev

类型“ ViewController”不符合协议“ MDCSwipeToChooseDelegate”

来自分类Dev

类型“ [String]”不符合协议“ Equatable”

来自分类Dev

类型“ AnyObject”不符合协议“哈希”

Related 相关文章

热门标签

归档