검색 기록과 같은 모델은 시간 순에 따라 정렬이 가능해야 하며, 동시에 중복 검색을 방지를 위한 Hashable이 필요할 수 있다.
struct Keyword: Codable {
let text: String
let date: Date
init(text: String, date: Date = Date()) {
self.text = text
self.date = date
}
}
Keyword가 정렬, Set을 지원하기 위해선 Hashable과 Comparable을 채택할 수 있다.
extension Keyword: Hashable {
func hash(into hasher: inout Hasher) {
hasher.combine(text)
}
static func ==(lhs: Keyword, rhs: Keyword) -> Bool {
lhs.text == rhs.text
}
}
extension Keyword: Comparable {
static func < (lhs: Keyword, rhs: Keyword) -> Bool {
lhs.date < rhs.date
}
}
Keyword의 해시 밸류를 text만 기준으로 하여 시간에 상관없이 text로 중복을 제거할 수 있고, 비교 연산에선 date를 기준으로 하여 시간에 따른 정렬을 지원하게 한다.
class ViewController: UIViewController {
let keywords: Set<Keyword> = [
.init(text: "q", date: .init(timeIntervalSinceNow: 10)),
.init(text: "w", date: .init(timeIntervalSinceNow: 11)),
.init(text: "e", date: .init(timeIntervalSinceNow: 12)),
.init(text: "r", date: .init(timeIntervalSinceNow: 13)),
.init(text: "t", date: .init(timeIntervalSinceNow: 12)),
.init(text: "r", date: .init(timeIntervalSinceNow: 11)),
.init(text: "r", date: .init(timeIntervalSinceNow: 10)),
]
override func viewDidLoad() {
super.viewDidLoad()
print("set", keywords)
print()
print("sorted", keywords.sorted())
}
}

- 결과
- set: 중복이 제거됨
- set -> sorted: 시간 순으로 정렬됨
샘플 프로젝트
'Swift' 카테고리의 다른 글
| Swift: 동시성 코드 작성 노하우 (1) | 2025.12.02 |
|---|---|
| Swift: CORS Error (0) | 2025.11.17 |
| struct Error vs. enum Error (1) | 2025.08.18 |
| Swift: class func, static func, func (0) | 2025.07.20 |
| Swift: print가 값을 출력하는 방법 (1) | 2025.07.13 |