CodableWrapper icon indicating copy to clipboard operation
CodableWrapper copied to clipboard

Equtable协议识别不出来

Open CarnivalOoO opened this issue 1 year ago • 0 comments
trafficstars

@Codable
struct ImproveHightligh {
    var name: String?
}

@Codable
struct ImproveSuggestion: Equatable {
    var name = ""
    let code: String?
    var highlightList: [ImproveHightligh]?

    static func == (lhs: ImproveSuggestion, rhs: ImproveSuggestion) -> Bool {
        return lhs.name == rhs.name && lhs.code == rhs.code
    }
}

这种写法会报错:Type 'ImproveSuggestion' does not conform to protocol 'Equatable'

有两种方式可以解决,我目前使用了extension的方式处理

/// 方式1,为模型ImproveHightligh添加Equtable
@Codable
struct ImproveHightligh: Equatable {
    var name: String?
}


/// 方式2,使用扩展
extension ImproveSuggestion: Equatable {
    static func == (lhs: ImproveSuggestion, rhs: ImproveSuggestion) -> Bool {
        return lhs.name == rhs.name && lhs.code == rhs.code
    }
}

推测可能是Equtable本身会对代码进行解析并自动实现func ==,Equtable解析的过程与与宏定义有冲突,可能是SwiftMacro的bug

CarnivalOoO avatar Apr 28 '24 10:04 CarnivalOoO