Skip to content

Latest commit

 

History

History
executable file
·
71 lines (53 loc) · 2.33 KB

[스위프트 대충보기] 10. 첨자(subscript).md

File metadata and controls

executable file
·
71 lines (53 loc) · 2.33 KB
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
---

[스위프트 대충보기] 10.첨자(subscript)

첨자?

  • 클래스, 구조체, 열거형 안에 첨자를 정의할 수 있음

  • 첨자: 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
              }
          }
      }