Compareable

열거형에서 Compareable 채택

enum YoondsCount: Int {
    case one = 0
    case two
    case three
    case four
}

extension YoondsCount: Comparable {
		// 원시값 존재하지 않을경우 생략 가능
    static func < (lhs: YoondsCount, rhs: YoondsCount) -> Bool {
        return lhs.rawValue < rhs.rawValue
    }
}

YoondsCount.one > YoondsCount.two // false
YoondsCount.two > YoondsCount.one // true
YoondsCount.two == YoondsCount.one // false

구조체에서 Compareable 채택

struct Man {
    var name: String
    var age: Int
}

extension Man: Comparable { 
    static func < (lhs: Man, rhs: Man) -> Bool {
        return lhs.age < rhs.age // 어떤값을 비교할지 구현 - age
    }
}

let man1: Man = Man(name: "Yoonds", age: 25)
let man2: Man = Man(name: "Minsu", age: 21)

man1 < man2 // false
man1 > man2 // true
man1 == man2 // false

클래스에서 Compareable 채택

class Man {
    var name: String
    var age: Int
    
    init(name: String, age: Int) {
        self.name = name
        self.age = age
    }
}

extension Man: Comparable {
    static func ==(lhs: Man, rhs: Man) -> Bool {
        return lhs.name == rhs.name && lhs.age == rhs.age
    }
    
    static func < (lhs: Man, rhs: Man) -> Bool {
        return lhs.age < rhs.age
    }
}

let man1: Man = Man(name: "Yoonds", age: 25)
let man2: Man = Man(name: "Minsu", age: 21)

man1 < man2
man1 > man2
man1 == man2