커스텀 오브젝트로 세트를 생성하려고합니다. 이가 작동 , 내 정의의 세트가 중복이없는 개체를 사용하는 경우 :스위프트 | 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의 이미 나는 hashValue를 오버라이드 (override) 할 필요가 해쉬 프로토콜 (또한 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
비교 포인트 # 2 https://stackoverflow.com/a/42286148/2976878뿐만 아니라 https://stackoverflow.com/q/33319959/2976878 – Hamish
@vadian 당신은 완전히 옳습니다, 이것은 나쁜 습관입니다. 감사. – Aximem