不符合协议“可解码”

时间:2019-10-20 20:56:53

标签: ios swift

我有以下代码代表曲棍球棒和一些有关它的信息。我遇到一个问题,即棍子不符合“可降解”标准。我知道结构中使用的每个类型也必须是可编码的,而且它们都是可以编码的。但是由于某种原因,“无条件”行会导致我不确定如何解决的错误。谢谢!

enum StickLocation: Int, Codable, Hashable, CaseIterable {
    case handle, mid, bottom
}

enum StickCondition: Int, Codable, Hashable, CaseIterable {
    case pristine, scuffed, damaged, broken
}

struct HockeyStick: Identifiable, Codable {
    var barcode: Int
    var brand: String
    var conditions: [StickLocation:(condition:StickCondition, note:String?)]    // Offending line
    var checkouts: [CheckoutInfo]
    var dateAdded: Date
    var dateRemoved: Date?

    // Conform to Identifiable.
    var id: Int {
        return self.barcode
    }

    // If the stick was never removed then its in service.
    var inService: Bool {
        return self.dateRemoved == nil
    }
}

1 个答案:

答案 0 :(得分:1)

conditions字典的值类型为(StickCondition, String?),它是一个元组。元组不是Decodable / Encodable,并且不能使它们符合协议,因此要解决此问题,我建议您创建一个新结构来替换元组,如下所示:

enum StickLocation: Int, Codable, Hashable, CaseIterable {
    case handle, mid, bottom
}

enum StickCondition: Int, Codable, Hashable, CaseIterable {
    case pristine, scuffed, damaged, broken
}

struct StickConditionWithNote: Codable, Hashable {
    var condition: StickCondition
    var note: String?
}

struct HockeyStick: Identifiable, Codable {
    var barcode: Int
    var brand: String
    var conditions: [StickLocation: StickConditionWithNote]
    var checkouts: [CheckoutInfo]
    var dateAdded: Date
    var dateRemoved: Date?

    // Conform to Identifiable.
    var id: Int {
        return self.barcode
    }

    // If the stick was never removed then its in service.
    var inService: Bool {
        return self.dateRemoved == nil
    }
}