서브스크립트

쏘스야·2023년 4월 14일
0

ios 개발자의 첫걸음

목록 보기
51/61
/**
 서브스크립트(Subscripts)
 대괄호는 사실, 특별한 형태의 메서드(기능) 호출 역할임 --> 메서드를 직접 구현도 가능
 
 */

var array = ["Apple","b","c","d"]

array[0]
array[1]


// 인스턴스[파라미터]

// 1. (인스턴스) 서브스크립트(Subscript)의 직접 구현 - 클래스, 구조체, (열거형)

class SomeData {
    var datas = ["Apple", "Swift", "IOS", "Hello"]
    
    subscript(index: Int) -> String {       // 1. 함수와 동일한 형태이지만, 이름은 subscript
        get {                               // 2. get/set 은 계산속성에서의 형태와 비슷
            return datas[index]
        }
        set(parameterName) {
            datas[index] = parameterName    // 또는 파라미터 생략하고 newValue 로 대체 가능 (계산 속성의 setter와 동일)
        }
    }
}


var data = SomeData()
// data[3]      // 접근 불가
//data.datas[1]       // 접근 가능


data[0]
data[2] = "하하"


/*
 서브스크립트 사용 예시 - 대괄호 형태로 사용하는 메서드이다.
 */

struct TimesTable {
    let multiplier: Int = 3
    
    subscript(i: Int) -> Int {
        return multiplier * i
    }
}

let threeTimesTalbe = TimesTable()

print("6에 3배를 하면 숫자 \(threeTimesTalbe[6]) 이(가) 나옵니다.")

threeTimesTalbe[2]


// 2차원 배열
struct Matrix {
    
    var data = [["1","2","3"],["4","5","6"], ["7","8","9"]]
    
    subscript(row: Int, column: Int) -> String? {
        if row >= 3 || column >= 3 {
            return nil
        }
        return data[row][column]
    }
}



var mat = Matrix()
mat[2, 2]!


/**
 2) 타입 서브스크립트(Type Subscript) - 클래스, 구조체, 열거형
 */

enum Planet: Int {      // 열거형의 원시값
    case mercury = 1, venus, earth, mars, jupiter, saturn, uranus, neptune
    
    static subscript(n: Int) -> Planet {        // Planet -> Self 대체 가능
        return Planet(rawValue: n)!
    }
}

let mars = Planet[4]
print(mars)


profile
개발자

0개의 댓글