-
Array safe subscript을 통한 index out of bounds 크래쉬 방지하기Swift 2022. 12. 11. 18:03
안녕하세요 :)
오늘은 Swift 코드를 작성하면서 경계해야되는 습관 중 index out of bounds를 방지하는 방법에 대해 알아보도록 하겠습니다
Swift에서는 배열을 다룰때 index 통한 접근을 할 수 있는데요
이 행동이 잘못 사용될 경우에 index out of bounds 에러가 발생하면서 앱이 죽는 현상을 겪을 수 있습니다
let arrayOfInts = [1, 2, 3] print(arrayOfInts[3]) // Fatal error: Index out of range
위 코드는 간단해서 문제가 바로 보이지만
실제 개발 환경에서는 이러한 문제를 가끔 놓칠수가 있습니다
(그대로 배포가 나갔다면 아찔하네요...)
아래 코드를 봅시다
public extension Array { subscript(safe index: Int) -> Element? { return indices ~= index ? self[index] : nil } } let arrayOfInts = [1, 2, 3] print(arrayOfInts[safe: 3]) // nil
위 코드를 보시면 인자로 받은 index 값이 현재 배열의 indices 내에 포함되어 있으면 self[index] 아니하면 nil을 반환하는 함수입니다
1. index 값이 현재 배열의 indices 내에 포함되어 있으면 크래쉬가 발생하지 않기 때문에 크래쉬가 유발되지 않고
2. 포함되지 않는 다면 nil을 반환함으로써 크래쉬를 피해갈 수 있습니다
일종의 안정 장치가 추가된 상황이라고 이해해주시면 됩니다
반환된 타입이 Element? 옵셔널로 반환이 되지만 값이 있는 경우에만 이후 로직을 수행할수 있는 장점도 있습니다
let arrayOfInts = [1, 2, 3] guard let value = arrayOfInts[safe: 3] else { // exit } // continue
감사합니다!