Language/Swift

swift extensions

jaewpark 2022. 8. 24. 19:23

이미 존재하는 클래스나 구조체, 열거형 등의 객체에 새로운 기능을 추가하여 확장해주는 구문입니다.

extensions의 기능을 소개를 하자면, 

  1. 새로운 연산 프로퍼티를 추가할 수 있습니다.
  2. 새로운 메소드를 정의할 수 있습니다.
  3. 새로운 초기화 구문을 추가할 수 있습니다.
  4. 기존 객체를 수정하지 않고 프로토콜을 구현할 수 있습니다.

 

extension <확장할 기존 객체명> {
  // 추가할 기능에 대한 구현 코드를 작성
}

 

연산 프로퍼티

extension Double {
    var km: Double { return self * 1_000.0 }
    var m: Double { return self }
    var cm: Double { return self / 100.0 }
    var mm: Double { return self / 1_000.0 }
}

let marathonDistance = 42.km + 195.m
print("마라톤의 총 거리는 \(marathonDistance)m 입니다")

// 마라톤의 총 거리는 42195.0m 입니다
1000 == 1_000
_가 추가된 부분은 단순히 자릿수를 구분하기 위해서 쓰였습니다.

 

메소드

기존 객체에서 사용된 같은 메소드를 익스텐션에서 재정의하는 것은 안됩니다

인스턴스 메소드는 익스텐션에서 mutating 키워드를 사용하여 인스턴스 자신을 수정할 수 있도록 합니다.

extension Int {
  mutating = func square() {
    self = self * self
  }
}

var value = 3
value.square() // 9