0
我正在嘗試創建一個具有自定義對象的Set。 這是工作,如果我使用一個設置我的自定義的對象不存在重複:Swift |設置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的,因爲NSObject中已經實現了哈希的協議(也Equatable)我要重寫散列值,並且這不再起作用,如果我使用一組我的自定義對象存在重複項,那麼我在這裏做錯了什麼? :
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'方法中初始化的隱式unwrapped選項。不幸的是,許多可怕的教程都暗示了這種可怕的習慣。不要那樣做,永遠不要。刪除感嘆號。 – vadian
比較#https://stackoverflow.com/a/42286148/2976878以及https://stackoverflow.com/q/33319959/2976878 – Hamish
@vadian你是完全正確的,這是一個壞習慣。謝謝。 – Aximem