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