我有Workout
与 一起上课Difficulty
财产
enum Difficulty: String {
case easy = "easy"
case moderate = "moderate"
case hard = "hard"
}
class Workout {
var name: String?
var difficulty: Difficulty?
.
.
.
}
我想按难度属性对一系列锻炼进行排序。我知道我可以通过将枚举的原始值分配给 Int 值并比较这些值来实现这一点,如下所示:
data.sort { $0.workout.difficulty!.rawValue < $1.workout.difficulty!.rawValue }
但我真的希望这个枚举来存储字符串,因为将它分配给标签文本很方便,而无需丑陋的 switch-case hacks,并且在某种程度上具有可比性。
如何实现这一目标?
实施Comparable
您的协议enum
。它给你一个static func < (lhs: Difficulty, rhs: Difficulty) -> Bool
定义排序的方法。
这是使用属性来简化排序的完整示例
enum Difficulty: String, Comparable {
case easy = "easy"
case moderate = "moderate"
case hard(String) = "hard"
private var sortOrder: Int {
switch self {
case .easy:
return 0
case .moderate:
return 1
case .hard(_):
return 2
}
}
static func ==(lhs: Difficulty, rhs: Difficulty) -> Bool {
return lhs.sortOrder == rhs.sortOrder
}
static func <(lhs: Difficulty, rhs: Difficulty) -> Bool {
return lhs.sortOrder < rhs.sortOrder
}
}
使之成为可能
data.sort { $0.workout.difficulty! < $1.workout.difficulty! }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)