Equatable
Coddy Swift 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 57개 중 38번째.
Equatable은 타입에 == 및 != 연산자를 제공합니다. 프로퍼티가 모두 Equatable인 구조체와 열거형은 준수 선언만으로 충분하며, Swift가 모든 프로퍼티를 비교합니다:
struct Card: Equatable {
let rank: Int
let suit: String
}
let a = Card(rank: 10, suit: "hearts")
let b = Card(rank: 10, suit: "hearts")
print(a == b)
print(a != Card(rank: 2, suit: "hearts"))출력:
true
true일부 속성만 비교하려면 static func ==을 직접 작성하세요. 여기서는 이름이 무엇이든 id가 일치하면 두 사용자가 같습니다:
struct User: Equatable {
let id: Int
var name: String
static func == (lhs: User, rhs: User) -> Bool {
lhs.id == rhs.id
}
}
print(User(id: 1, name: "Ada") == User(id: 1, name: "Ada L."))
print(User(id: 1, name: "Ada") == User(id: 2, name: "Ada"))출력:
true
falseEquatable은 전체 배열에서 contains(_:), firstIndex(of:), ==처럼 비교가 필요한 표준 메서드를 사용할 수 있게 합니다:
struct Point: Equatable {
let x: Int, y: Int
}
let path = [Point(x: 0, y: 0), Point(x: 1, y: 2)]
print(path.contains(Point(x: 1, y: 2)))
print(path.firstIndex(of: Point(x: 1, y: 2))!)
print(path == [Point(x: 0, y: 0), Point(x: 1, y: 2)])출력:
true
1
true클래스는 ==을 자동으로 제공받지 않습니다. 대신 ===로 동일성을 비교합니다. 값으로 비교해야 하는 클래스는 ==을 직접 구현해야 합니다:
class Color: Equatable {
let hex: String
init(hex: String) { self.hex = hex }
static func == (lhs: Color, rhs: Color) -> Bool { lhs.hex == rhs.hex }
}챌린지
쉬움Product에는 sku, name 및 price가 있습니다. 다른 필드의 값과 관계없이 sku가 일치하면 두 제품은 동일합니다. 사용자 지정 ==을 사용하여 Product가 Equatable을 준수하도록 만든 다음, 모든 제품의 첫 번째 항목만 유지하는 mergeCatalog(_:)을 완성하세요(contains 사용). 그런 다음 sku name price 행을 반환하고 그 뒤에 removed: 2를 반환하도록 하세요.
제공된 코드는 제품을 sku,name,price 형식의 행으로 읽고 반환된 각 행을 출력합니다.
코드는 Product.swift와 Functions.swift에 작성하세요. main.swift에는 제공된 입력/출력 코드가 있으며 편집할 수 없습니다.
직접 해보기
// 제공된 입력/출력 코드: 그대로 유지하세요
var input: [String] = []
while let line = readLine() { input.append(line) }
let products = input.map { line -> Product in
let p = line.split(separator: ",").map(String.init)
return Product(sku: p[0], name: p[1], price: Int(p[2])!)
}
for line in mergeCatalog(products) { print(line) }
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
객체 지향 프로그래밍의 모든 레슨
직접 연습해 보세요: Swift 플레이그라운드