// Equatable
// 要想得知2個實例是否等價,一般做法是遵守Equatable協(xié)議,重載:==運(yùn)算符
// 與此同時想括,等價于重載了 != 運(yùn)算符
// 告訴別人這個可以進(jìn)行等號運(yùn)算符進(jìn)行計算的
struct Point: Equatable {
var x: Int, y: Int
}
var p1 = Point(x: 10, y: 20)
var p2 = Point(x: 11, y: 22)
print(p1 == p2)
print(p1 != p2)
// 如果數(shù)值是完全一樣的,則是相等的
// Swift為以下類型提供默認(rèn)的Equatable實現(xiàn)
// 沒有關(guān)聯(lián)類型的枚舉
// 只擁有遵守Equatable協(xié)議關(guān)聯(lián)類型的枚舉
// 只擁有遵守Equatable協(xié)議存儲屬性的結(jié)構(gòu)體
// 引用類型比較存儲的地址值是否相等(是否引用著同一個對象),使用恒等運(yùn)算符===、 !==
// Comparable
// score大的比較大煞躬,若score相等,age小的比較大
struct Student: Comparable {
var age: Int
var score: Int
init(score: Int, age: Int) {
self.score = score
self.age = age
}
static func < (lhs: Student, rhs: Student) -> Bool {
(lhs.score < rhs.score) || (lhs.score == rhs.score && lhs.age > rhs.age)
}
static func > (lhs: Student, rhs: Student) -> Bool {
(lhs.score > rhs.score) || (lhs.score == rhs.score && lhs.age > rhs.age)
}
static func <= (lhs: Student, rhs: Student) -> Bool {
!(lhs > rhs)
}
static func >= (lhs: Student, rhs: Student) -> Bool {
!(lhs < rhs)
}
}
// 要相比較2個實例的大小逸邦,一般做法是:
// 遵守Comparable協(xié)議
// 重載相應(yīng)的運(yùn)算符
var stu1 = Student(score: 100, age: 20)
var stu2 = Student(score: 98, age: 18)
var stu3 = Student(score: 100, age: 20)
print("___________________________")
print(stu1 > stu2)
print(stu1 >= stu2)
print(stu1 >= stu3)
print(stu1 <= stu3)
print(stu1 > stu2)
print(stu1 >= stu2)