Swift |使用 NSObject 设置
Swift | Set with 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 扩展了我的 class,因为 NSObject 已经实现了 Hashable 协议(以及 Equatable),我必须重写 hashValue,如果我在那里使用我的自定义对象集,它就不再起作用了是重复的,我在这里做错了什么? :
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
}
}
感谢您的帮助!
NSObject 是 Cocoa 类型。 NSObject 的规则不同于 Swift 的规则。要使 NSObject 在集合中工作,它必须具有 isEqual
的实现与其 hash
.
的实现一致
我正在尝试创建一个包含自定义对象的集合。 这是有效的,如果我使用一组我的自定义对象,则没有重复项:
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 扩展了我的 class,因为 NSObject 已经实现了 Hashable 协议(以及 Equatable),我必须重写 hashValue,如果我在那里使用我的自定义对象集,它就不再起作用了是重复的,我在这里做错了什么? :
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
}
}
感谢您的帮助!
NSObject 是 Cocoa 类型。 NSObject 的规则不同于 Swift 的规则。要使 NSObject 在集合中工作,它必须具有 isEqual
的实现与其 hash
.