Error in user YAML: (<unknown>): did not find expected key while parsing a block mapping at line 1 column 1
---
layout: post
title: [스위프트 대충보기] 10.첨자(subscript)
tags: 스위프트, swift, 첨자, subscript, 첨자 오버로딩, subscript overloading
---
-
클래스, 구조체, 열거형 안에 첨자를 정의할 수 있음
-
첨자:
someArray[index]
와 같이[]
사이에 인덱스를 넣어서 인스턴스 정보를 액세스하는 연산
-
subscript(입력 파라미터들) -> 반환타입 {}
subscript(index: Int) -> Int { get { // 적절한 값 반환 } set(newValue) { // 적절하게 설정 } }
-
읽기전용 첨자인 경우 get을 생략하고, 첨자 본문에 바로 코드를 적는다
subscript(index: Int) -> Int { // 적절한 값 반환 }
-
컬렉션 원소 액세스: 딕셔너리나 배열을 생각해 볼것
-
원한다면 다른 목적으로도 사용가능(예제는 없음)
-
첨자에서 가변길이 파라미터를 쓸 수 있고, var 파라미터도 쓸 수 있음
-
inout 파라미터는 쓸 수 없고, 파라미터의 디폴트 값도 지정할 수 없음
-
한 클/구/열(귀찮아서 앞으론 이렇게...) 안에 필요한 만큼 첨자를 넣을 수 있음: subscript overloading
-
파라미터를 2개 이상 받을 수도 있음
struct Matrix { let rows: Int, columns: Int var grid: Double[] init(rows: Int, columns: Int) { self.rows = rows self.columns = columns grid = Array(count: rows * columns, repeatedValue: 0.0) } func indexIsValidForRow(row: Int, column: Int) -> Bool { return row >= 0 && row < rows && column >= 0 && column < columns } subscript(row: Int, column: Int) -> Double { get { assert(indexIsValidForRow(row, column: column), "Index out of range") return grid[(row * columns) + column] } set { assert(indexIsValidForRow(row, column: column), "Index out of range") grid[(row * columns) + column] = newValue } } }