私はカスタムオブジェクトでセットを作成しようとしています。これが動作している 、私は私のカスタムの設定がまったく重複が存在しないオブジェクトを使用する場合:スイフト| NSObjectで設定
public class AttributesGroup: Hashable, Equatable, Comparable {
open var id: Int!
open var name: String!
open var position: Int!
public init (id: Int = 0, name: String = "", position: Int = 0) {
self.id = id
self.name = name
self.position = position
}
open var hashValue: Int {
get {
return id.hashValue
}
}
public static func ==(lhs: AttributesGroup, rhs: AttributesGroup) -> Bool {
return lhs.id == rhs.id
}
public static func < (lhs: AttributesGroup, rhs:AttributesGroup) -> Bool {
return lhs.position < rhs.position
}
}
NSObjectのは、すでに私はハッシュ値を上書きする必要がハッシュ可能プロトコル(ともEquatable)を実装しているので、私は、NSObjectのと私のクラスを拡張し、これはもう機能しません。カスタムオブジェクトのセットを使用すると重複がありますが、ここで何が間違っていますか? :
public class AttributesGroup: NSObject, Comparable {
open var id: Int!
open var name: String!
open var position: Int!
public init (id: Int = 0, name: String = "", position: Int = 0) {
self.id = id
self.name = name
self.position = position
}
open override var hashValue: Int {
get {
return id.hashValue
}
}
public static func ==(lhs: AttributesGroup, rhs: AttributesGroup) -> Bool {
return lhs.id == rhs.id
}
public static func < (lhs: AttributesGroup, rhs:AttributesGroup) -> Bool {
return lhs.position < rhs.position
}
}
ありがとうございました!
いつものように、**オプションは、オプションではない値を持つ 'init'メソッドで初期化される暗黙のアンラップされたオプションとしてプロパティを宣言します。残念なことに、多くの*恐ろしい*チュートリアルはこの恐ろしい*習慣を示唆しています。絶対にしないでください。感嘆符を削除します。 – vadian
https://stackoverflow.com/a/42286148/2976878とhttps://stackoverflow.com/q/33319959/2976878の比較ポイント#2 – Hamish
@vadianあなたはまったく正しい、これは悪い習慣です。ありがとう。 – Aximem