私たちのコードベースをSwift2にアップグレードした後、私は異常な問題に遭遇しました。集合は、期待どおりに減算も結合もしません。Swift 2.0 NSObjectサブクラスを含むときに期待通りに動作しません。
class A: NSObject {
let h: Int
init(h: Int) {
self.h = h
}
override var hashValue: Int {
return h
}
}
func ==(lhs: A, rhs: A) -> Bool {
return lhs.hashValue == rhs.hashValue
}
let a = A(h: 1)
let b = A(h: 1)
var sa = Set([a])
let sb = Set([b])
sa.subtract(sb).count // Swift1.2 prints 0, Swift 2 prints 1
sa.contains(a) // Swift1.2 true, Swift 2 true
sa.contains(b) // Swift1.2 true, Swift 2 false
新しいセットは内部操作にhashValueを使用していません。どのようなアイデアは、バグ、またはこの問題を回避する方法ですか?
ありがとうございました!私はMKAnnotationサブクラス(NSObjectを拡張する必要もあります)でこの問題を抱えていました。あなたはそのテーマに関するいくつかの文書へのリンクを持っていますか? – brki
スウィフト3でNSObjectを正しく設定するためにisEqualとhashValueの両方が必要なようです –