Online Swift Playground
//Equatable
struct Point{
var x: Int
var y: Int
}
extension Point: Equatable {
static func ==(lhs: Point, rhs: Point) -> Bool {
lhs.x == rhs.x && lhs.y == rhs.y
}
}
var p1 = Point(x:1, y:1)
var p2 = p1
print("p1 equal p2: \(p1 == p2)")
//Comparable
extension Point: Comparable {
static func <(lhs: Point, rhs: Point) -> Bool {
if lhs.x == rhs.x {
return lhs.y < rhs.y
}
return lhs.x < rhs.x
}
}
var p3 = Point(x:3, y:3)
print("max: \(p1 < p3 ? p3 : p1)")
var p4 = Point(x:4, y:4)
var p5 = Point(x:5, y:5)
var pArr = [p5, p2, p1, p4, p3]
print(pArr)
pArr.sort()
print(pArr)
print(pArr.max()!)
print(pArr.min()!)
print(pArr.contains(p1))
print(pArr.starts(with: [p1, p2]))
pArr.reverse()
print(pArr)
//Hashable
class Person: Hashable{
let name: String
init(name: String){
self.name = name
}
static func ==(lhs: Person, rhs: Person) -> Bool {
lhs.name == rhs.name
}
func hash(into hasher: inout Hasher) {
hasher.combine(name)
}
}
let person = Person(name: "Mike")
let dic1 = [person: "1973"]
print(dic1)
//CustomStringConvertible, CustomDebugStringConvertible
extension Person: CustomStringConvertible {
var description: String {
"\(name)"
}
}
print(dic1)
extension Person: CustomDebugStringConvertible {
var debugDescription: String {
"Person: \(name)"
}
}
debugPrint(dic1)
Комментариев нет:
Отправить комментарий