【发布时间】:2019-03-28 19:40:24
【问题描述】:
我不知道这是一个错误还是一个功能,但是对枚举数组进行排序会在每次运行时给出不同的结果。这是测试它的基本代码。
enum Tag: String {
case bold, italic, underline
}
extension Tag: Comparable {
static func <(lhs: Tag, rhs: Tag) -> Bool {
return lhs.hashValue < rhs.hashValue
}
}
let tags:[Tag] = [.bold, .italic, .underline].sorted()
print(tags.map {$0.rawValue})
【问题讨论】:
-
@VatsalManot 对。我没注意。我会删除我的评论。
-
@Meanteacher 这里的答案具有误导性:
hashValue是基于函数的。对于给定值的含义,它的 hashValue 将是相同的。除非您存储它,然后稍后在不同的时间再次构建它。从共享链接中,它说“随机播种”意味着 hashValue 属性将在每次执行 Swift 程序时返回 不同的值。 即它不会在 Xcode 构建“期间”发生变化。除此之外:基于它们的字符串原始值比较枚举是不正确的。你如何比较“john”、“Peter”和“TJ”? OP 没有说明他希望如何比较它们......