Sequence Protoocol을 따는 Collection Protocol은 Indexing에 관한 프로토콜입니다. Dictionary 또한 Collection protocol을 따르고 있습니다.
그렇기 때문에 Array에서 잘못 인덱스를 접근하는 것을 방지하기 위해서는 Collection Protocol로 접근하는 것이 좋습니다.
extension Collection {
subscript(safe index: Index) -> Element? {
if self.indices.contains(index) {
return self[index]
}
return nil
}
}
indices라는 Collection프로토콜의 속성은 해당 컬렉션의 모든 인덱스를 Collection으로 반환합니다.
해당 index가 포함되어 있는지 확인 후 있다면 Array의 Element(Generic) 반환하고, 없다면 nil을 반환합니다.
추가
※ Array를 확장한다면 더 높은 성능을 보여줄 수 있습니다. (하리 댓글을 보고 추가합니다.)
extension Array {
subscript(optional index: Int) -> Element? {
if 0..<indices.count ~= index {
return self[index]
}
return nil
}
}
10 -5승이니 0.000018 < 0.0002 이므로 훨씬 빠릅니다.
'Swift' 카테고리의 다른 글
Swift Optional unWrapping을 좀 더 간편하게 쓰는 법 (0) | 2023.04.20 |
---|---|
Array에서 중복 제거하는 방법 (0) | 2023.04.19 |
KeyPath (2) | 2023.01.16 |
FP에서 Setter 사용법 (0) | 2022.12.10 |
Custom Operator => (0) | 2022.12.02 |