如何使用两个枚举变量实现 Identifiable

Isa*_*iah 4 identity hashable swift swift-protocols 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
    }
}
Run Code Online (Sandbox Code Playgroud)

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

Rob*_*ier 10

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

extension Card: Hashable, Identifiable {
    var id: Self { self }
}
Run Code Online (Sandbox Code Playgroud)

  • 我认为不是。默认情况下,结构没有任何标识。附加“可识别”给他们一个,并表示这个系统中确实有一个这样的东西。例如,一副牌中只有一张方块 K。如果您看到另一张,它实际上是“同一张牌”,而不仅仅是一张等效/可替代(即可等同)的牌。如果这不是真的,那么“可识别”就是一个谎言。这对 ForEach 循环有重要影响(我看到人们在列表中的元素不能保证唯一时一直使用 `id: \.self`。它有点“有效”,直到它不起作用......) (4认同)