ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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

    감사합니다!

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    댓글

Designed by Tistory.