Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- Clean Architecture
- 파이썬 풀이
- 백준온라인저지
- 안드로이드 공부
- BFS
- Swift공부
- 백준 온라인 저지
- ios
- Kotlin
- 알고리즘
- 알고리즘 공부
- error
- greedy algorithm
- Android
- 파이썬
- SwiftUI
- swift
- 앱개발
- Level 1
- Autolayout
- Python
- 그리디 알고리즘
- UIKit
- iOS개발
- 프로그래머스
- 정렬
- dfs
- Algorithm
- 오토레이아웃
- 공부
Archives
- Today
- Total
Tori의 개발 공부
배열 Safe Index - 안전하게 배열 조회하기 본문
배열은 인덱스를 통해 빠른 접근이 가능하다.
하지만 인덱스 범위를 넘게 되면 런타임 에러가 발생해 앱을 강제 종료 시킬 수 있어 치명적이다.
프로젝트 진행 중 인덱스를 접근할 일이 많았고, 이는 위험성을 가지고 있기 때문에 멘토님께서 safe Index를 사용하는 방법을 권유하셨다.
따라서 앱에서 인덱스를 통한 접근이 필요할 시 subscript를 사용하여 안전하게 접근할 수 있는 방법을 간단하게 정리해 보겠다.
extension Array {
subscript (safe index: Int) -> Element? {
return indices ~= index ? self[index] : nil
}
}
indices는 Collection 타입의 유효범위를 나타낸다.
예를 들어 arr = [1,2,3] 일 때 indices를 출력하면 0.. <3이라는 범위값을 얻을 수 있다.
즉 범위를 체크하는 ~= 연산자를 통해 해당 인덱스가 Array의 범위에 속하는지 확인하고
만약 범위를 벗어나는 값이라면 nil을 반환해 준다.
옵셔널로 값을 반환하여 옵셔널 언랩핑의 과정을 거쳐야 하지만,
범위를 벗어날 시 런타임 에러가 아니라 nil 값을 받아 프로그램을 강제종료 시키지 않고 에러를 핸들링할 수 있다.
print(arr[safe: 1])
: safe Index를 통한 접근으로 범위 안에 속하여 옵셔널로 래핑 된 원소 값을 반환한다.print(arr[safe: 3])
: safe Index를 통한 접근으로 범위를 벗어나 nil을 반환한다.print(arr[3])
: safe Index가 아닌 일반적인 접근으로 범위를 벗어나면 out of range 에러를 발생시킨다.
indices는 IOS 9부터 사용 가능하기 때문에 하위 버전의 경우는 startIndex, endIndex를 사용하여 안전하게 배열을 조회할 수 있다.
extension Array {
subscript (safe index: Int) -> Element? {
return startIndex <= index && index < endIndex ? self[index] : nil
}
}
똑같은 결과를 확인할 수 있다.
'IOS App Programming > Swift' 카테고리의 다른 글
[Swift] for 문 거꾸로 순회(stride), reverse VS reversed (0) | 2024.03.11 |
---|---|
Struct VS Class 메모리 관점 고찰과 언제 써야할까? (1) | 2024.02.28 |
접근제한자 정리 및 성능 향상 이유 + final 제한자 (0) | 2024.02.23 |
CollectionType 차이점 및 효율적인 사용 시점 (0) | 2024.02.22 |
weak self 를 사용하지 않아도 되는 경우 (2) | 2024.02.07 |