IdentifiedArrayOf
는 SwiftUI와 Composable Architecture(TCA)에서 자주 사용되는 컬렉션 타입으로,
Identifiable
을 준수하는 요소들을 ID 기준으로 빠르게 접근하면서도 순서를 유지할 수 있는 하이브리드 컬렉션이다.
단순한 [Element]
배열이 아닌, 배열(Array) + 딕셔너리(Dictionary) 의 장점을 결합한 구조로,
다음과 같은 상황에서 매우 유용하게 사용된다:
id
로 직접 접근하고 싶을 때items.append(Item(id: UUID(), title: "첫 번째"))
items[id: someID]?.title = "수정됨"
items.remove(id: someID)
items.move(fromOffsets: source, toOffset: destination)
IdentifiedArrayOf<Element>
는 내부적으로 다음 두 구조를 동시에 유지한다:
struct IdentifiedArray<ID: Hashable, Element: Identifiable> {
private var elements: [Element]
private var idsToIndices: [ID: Int]
}
elements
: 실제 데이터를 담고 있는 배열
idsToIndices
: 빠른 ID 접근을 위한 해시 맵
이 덕분에 id 기반 접근은 빠르게(O(1))
, 순서 있는 렌더링도 가능하다.
import ComposableArchitecture
struct Item: Identifiable, Equatable {
var id: UUID
var title: String
}
#### var items: IdentifiedArrayOf<Item> = []
• 요소가 Identifiable을 충실히 구현하고 있어야 한다.
• id 중복이 있을 경우 잘못된 결과를 유발하거나 크래시 날 수 있다.
• 대량의 요소에 대해 빈번한 삭제/이동이 필요하다면 성능을 고려해 별도 최적화가 필요할 수 있다.
IdentifiedArrayOf
는 TCA
에서 식별성과 순서를 동시에 보장하는 컬렉션으로,
뷰 상태 관리
, 상태 업데이트
, 뷰 렌더링의 성능 최적화
에 매우 적합하다.
특히 ForEachStore
, id 기반 작업
, 상태 추적
이 중요한 구조에서 필수적이다.