首页 > 解决方案 > 如何使用两个枚举变量实现 Identifiable

问题描述

使用 Swift 5.3,如何Identifiable通过使结构的标识依赖于两个枚举变量的组合来在结构上实现协议?

有问题的代码很简单,

struct Card: Identifiable {
    let suit: Suit
    let rank: Rank
    
    enum Suit {
        case spades, clubs, diamonds, hearts
    }
    
    enum Rank: Int {
        case one = 1, two, three, four, five, six, seven, jack, queen, king
    }
}

上面的结构还不符合Identifiable协议。我怎样才能将它的身份实现为它的唯一组合suitrank(只创建一次)?本质上,它的身份可能是“黑桃 1”或“钻石杰克”。此外,如果可能的话,我想保留rank作为一种Int类型,以便以后进行算术运算。先感谢您!

标签: swiftidentityswift-protocolshashableidentifiable

解决方案


由于这种类型是由其值的组合精确定义的,因此它是它自己的标识符。所以只要 Card 是 Hashable 的,它就可以识别自己:

extension Card: Hashable, Identifiable {
    var id: Self { self }
}

推荐阅读