You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何遵循DTO协议的Exercise结构体仍报‘类型不符合协议’错误?

问题原因与解决方案

错误原因

你定义的DTO协议明确要求GetDefaultInstance()方法返回**DTO协议类型**,但Exercise结构体中实现的方法返回的是具体的Exercise类型。Swift对协议方法的签名匹配要求严格,哪怕Exercise遵循DTO,返回具体遵循类型也不满足协议的返回类型要求——协议规定的是返回DTO这个抽象协议类型,而非它的具体实现类型。

解决方案

推荐修改协议,让方法返回Self类型,这样每个遵循DTO的类型都能返回自身的默认实例,更贴合实际需求:

public protocol DTO {
    static func GetDefaultInstance() -> Self
}

修改后,Exercise中原有的实现就完全符合协议要求了,因为Self在这里指代的就是Exercise类型。

如果暂时不能修改协议,也可以调整Exercise的实现,让返回类型严格匹配协议要求,但这种方式后续调用时需要类型转换,不够便捷:

public struct Exercise: Codable, Identifiable, DTO {
    public var id: String { return ExerciseId }
    public var ExerciseId: String
    public var ExerciseName: String
    
    public static func GetDefaultInstance() -> DTO {
        return Exercise(ExerciseId: "", ExerciseName: "")
    }
}

内容的提问来源于stack exchange,提问作者Legion

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 15:27:40