やりたいこと
- あるクラスのオブジェクトの配列を作りたい。
- そのなかで、クラスの
id
が同じオブジェクトはその配列に2つ以上存在しないことを保証したい。
実装
- Equatableプロトコルを実装しました。
-
static func ==(lhs: Hoge, rhs: Hoge) -> Bool
関数を実装して、何によって同じであるとするのかを決めてあげます。 - できたら、
contains()
を使って判定できます。
Playground.playground
class Hoge {
let id: Int
init(_ id: Int) { self.id = id }
}
extension Hoge: Equatable {
static func ==(lhs: Hoge, rhs: Hoge) -> Bool {
return lhs.id == rhs.id
}
}
Hoge(0) == Hoge(0) // => true
Hoge(1) == Hoge(0) // => false
let array = [Hoge(0), Hoge(1), Hoge(2)]
array.contains(Hoge(0)) // => true
参考
- Swift 3: How to write Equatable func
- How to check if an element is in an array