NSObject, NSCoding
に準拠したカスタムクラスPlayer
があります。 Player
オブジェクトは、私が遭遇していた問題のid: String!
SwiftのNSObjectのデフォルト比較をオーバーライドする方法
一つでインスタンス化されて、私は次のような操作を実行するときです:
let listOfPlayers = [Player]()
//populate listOfPlayers
if listOfPlayers.contains(aPlayer) ...
具体的には、contains
は、メモリポインタに基づいて結果を返しますし、 id
の値に基づいていません。このように、私はtrue
、場合によってはfalse
となるでしょう。
私はデフォルトの比較メソッドをオーバーライドしたい、と次のようでした:
func isEqual(object: AnyObject?) -> Bool {
if let otherPlayer = object as? Player {
return self.id == otherPlayer.id
}
return false
}
static func == (lhs: Player, rhs: Player) -> Bool {
return lhs.id == rhs.id
}
しかし、これらの機能が実行されていません。それだけでid
要素を比較しているので、顧客のコンパレータを持っているための正しい方法は何ですか
私も
override
を追加しようとしましたが、それはエラーを返す「メソッドは、そのsuperclass`から任意のメソッドをオーバーライドしていないのですか?
おかげ
'isEqual'を書いたときに、コンパイラが' override'を挿入しなかったとき、それは手がかりでした! – matt
あなたはdownvoteが何であるか説明できますか? – daspianist