내가 만든 구조체와 값을 Ints의 배열로 사용하여 키로 사전을 만들려고합니다. 그러나 오류가 계속 발생합니다 : Type 'dateStruct' does not conform to protocol 'Hashable'
. 나는 필요한 메소드를 구현 했음에도 불구하고 여전히 작동하지 않는다고 확신한다. 여기 내 구조체 구현 된 프로토콜이다 :Hashable 프로토콜을 준수합니까?
struct dateStruct {
var year: Int
var month: Int
var day: Int
var hashValue: Int {
return (year+month+day).hashValue
}
static func == (lhs: dateStruct, rhs: dateStruct) -> Bool {
return lhs.hashValue == rhs.hashValue
}
static func < (lhs: dateStruct, rhs: dateStruct) -> Bool {
if (lhs.year < rhs.year) {
return true
} else if (lhs.year > rhs.year) {
return false
} else {
if (lhs.month < rhs.month) {
return true
} else if (lhs.month > rhs.month) {
return false
} else {
if (lhs.day < rhs.day) {
return true
} else {
return false
}
}
}
}
}
는 아무도 나에게 설명해 주시겠습니까 나는 여전히 오류를 받고 있어요 이유는 무엇입니까?
감사합니다를! Btw, 왜'=='이 잘못 되었습니까? 같은 날짜, 월, 일을 가진 2 개의 날짜가 어쨌든 동일한 hashValue를 가지지 않습니까? – MarksCode
물론 두 개의 동일한 날짜는 동일한 해시를 갖습니다. 그러나 동일한 해시를 가진 두 개의 날짜가 반드시 동일하지는 않습니다. 두 개의 서로 다른 날짜가 동일한 해시를 가질 수 있습니다. 괜찮아. 그러나 동일한 해시를 사용하는 두 개의 날짜가 동일 할 필요는 없습니다. – rmaddy
글쎄, 혼란 스럽다. 어쨌든 2 개의 다른 날짜의 년, 월, 일이 2000, 1, 2, 2000, 2, 3과 같이 같은 것이 될 수 있기 때문에 어쨌든 내 반환 (year + month + day) .hashValue 만 충분하지 않다. 1? – MarksCode