iOS/문법

Swift 문법과 친해지기 - Subscript

HJ39 2022. 12. 31. 21:11

subscript

서브스크립트는 우리가 배열을 사용할 때 배열 속 원소에 접근하기 위해 사용하는 대괄호 []를 지칭한다.

 

□ 배열 서브스크립트 정의

→ index를 int타입으로 받고 Element를 반환한다.

 

□ 딕셔너리 서브스크립트 정의

→ key값을 input으로 받고 Value를 반환한다.

 

이를 이용해 서브스크립트를 입맛에 맞게 변형할 수 있다

 

 

서브스크립트 정의하기

subscript(index: Int) -> Int {
    get {
    }
    set(newValue) {
    }
}

→ subscript 키워드로 작성하고 1개 이상의 매개변수 값과 반환 값을 지정 (생략 불가)

→ getter 혼자 사용은 가능 하지만, setter는 혼자 사용이 불가능하다.

 

□ 배열 서브스크립트 사용해보기

let str = "Hello"

print(str[1])

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

→ extension 부분은 참고 사이트 1번에서 참조하였다.

→ 위 코드를 이용하여 원하는 문자열에 접근이 가능하다.

 

□ 서브 스크립트 구조체 사용해 보기

struct testSub1{
    var arr1 = [1,2,3,4,5]
    
    subscript(index: Int) -> Int{
        get{
            return arr1[index]
        }
        set{
            arr1[index] = newValue
        }
    }
}

var sub1: testSub1 = .init()

sub1[0]		//get 실행, 1
sub1[0] = 6		//set 실행, 6
sub1[0]		//get 실행, 6

→ subscript의 setter, getter를 이용하여 배열에 값을 저장하고 출력하는 코드이다.

 

□ 타입 서브스크립트

struct testSub2{
    static var arr2 = [1,2,3,4,5]
    static var arr3 = ["a","b","c"]
    
    static subscript(index: Int) -> Int{
        get{
            return arr2[index]
        }
        set{
            arr2[index] = newValue
        }
    }
}

// arr2가 실행됨
testSub2[1]	//2
testSub2[1] = 3	//3
testSub2[1]	//3

testSub2.arr3[1] //"b"

→ static의 성질에 따라서 struct 이름으로 배열처럼 사용이 가능하다.

→ 위 예제처럼 이름으로 출력 시 첫 static 선언된 변수가 출력된다.

→ 그 외의 변수를 출력할 때는 직접 '.'을 이용하여 접근해야 함

 

 

#참고한 사이트

  1. https://babbab2.tistory.com/123
  2. https://velog.io/@cherrish_red/swift-Subscript-%EA%B5%AC%ED%98%84%ED%95%98%EA%B8%B0