Swift 기초 문법 👊

[Swift_문법] Subscript (Index out of range 해결🌈) _ 12

개발하는윤기사 2022. 11. 3. 18:51
728x90
반응형

안녕하세요! 개발하는 윤기사입니다!!

 

오랜만에 Swift 기초 문법에 관한 내용을 가지고 왔습니다.

 

Subscript에 관련한 내용인데요.

 

바로 시작해보겠습니다!

 

 

 

 

Subscripts — The Swift Programming Language (Swift 5.7)

Subscripts Classes, structures, and enumerations can define subscripts, which are shortcuts for accessing the member elements of a collection, list, or sequence. You use subscripts to set and retrieve values by index without needing separate methods for se

docs.swift.org

스위프트 프로그래밍 언어 가이드 북에 보시면

 

Subscript는 Class, Struct, Enum에서 Sequence의 멤버 요소에 접근하기 위한 바로가기 첨자를 뜻한다고 합니다.

 

하나의 타입에 여러 스크립트를 정의할 수 있고, 오버로드 할 수도 있습니다.

 

Computed Property를 활용하여 정의합니다.

 

예를 들면 아래와 같이 Array에서 0번째, 1번째 Index값을 불러올 수 있는 겁니다.

let num = [1,2,3,4]

num[0]
num[1]

 

자세하게 살펴보도록 하죠.

 

Subscript의 정의

Subscript 키워드로 작성하며 하나 이상의 파라미터와 반환 값을 지정합니다.

subscript(index: Int) -> Int {
    get {
        // 적절한 반환 값
    }
    set(newValue) {
        // 적절한 set 액션
    }
}

 

Subscript의 예시

1. Struct String에 Subscript를 선언해보겠습니다. subscript문법을 통해 각 문자에 접근할 수 있습니다! 

 

만약 subscript 문법을 구성하지 않고 호출하면 컴파일 오류가 뜹니다.

extension String {

	subscript(idx: Int) -> String? {
    		guard (0..<count).contains(idx) else {
            	return nil
            }
            let result = index(startIndex, offsetBy: idx)
            return String(self[result])
     }
}

let str = "안녕하세요"
print(str[2]) //"하" 출력
print(str[8]) //nil 출력

 

2. Collection Protocol에 Subscript를 선언해보겠습니다. subscript 문법을 통해 배열에 접근할 수 있습니다! 

// Collection Protocol에 Subscript 선언
extension Collection {

	subscript(safe index: Index) -> Element? {
		return indices.contains(index) ? self[index] : nil
     }
}

        var array = Array(repeating: "A", count: 100)
        address(&array)
        
        print(array[safe: 99])
        print(array[safe: 199])

 

3. 또 커스텀 구조체에 Subscript를 선언하여 사용할 수도 있습니다.


// Custom Struct Phone에 Subscript 선언
struct Phone {
    
    var numbers = ["01012341234", "01056781234" ,"01033533453", "01022217469"]
    
    subscript(idx: Int) -> String {
        get {
            return self.numbers[idx]
        }
        set {
            self.numbers[idx] = newValue
        }
    }
}

var value = Phone()
print(value[0]) // "01012341234" 출력
value[1] = "01012345678"
print(value[1]) // "01012345678" 출력

 

다 잘 이해하셨나요?

 

앞으로 subscript를 이용하시면 Index out of range 오류로부터 자유를 얻으실 수 있습니다😎

 

아마 예시 코드를 같이 실행해보시면 쉽게 이해가 될 겁니다!

 

윤기사는 오늘도 빡코딩 하겠습니다 ^____^

728x90
반응형