如何解决如何使用两个枚举变量实现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
协议。如何将其身份实现为suit
和rank
(仅创建一次)的唯一组合?从本质上讲,它的身份可以是“锹1”或“钻石杰克”。此外,如果可能的话,我想将rank
保留为Int
类型,以便以后进行算术运算。预先谢谢你!
解决方法
由于此类型完全由其值的组合定义,因此它是其自己的标识符。因此,只要Card是可哈希的,它就可以标识自己:
extension Card: Hashable,Identifiable {
var id: Self { self }
}
,
使Suit
符合String
并将其组合以创建唯一标识符String
。
struct Card: Identifiable {
var id: String { "\(suit.rawValue)\(rank.rawValue)" }
let suit: Suit
let rank: Rank
enum Suit: String {
case spades,clubs,diamonds,hearts
}
enum Rank: Int {
case one = 1,two,three,four,five,six,seven,jack,queen,king
}
}
警告:不能在每种情况下都采用这种方法。尽管这在此特定程序中效果很好。因为我们使用两个字符串的连接来计算id
对象的Card
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。