大器晩成

[Extensions] 멤버의 확장 (계산 속성) 본문

iOS/Swift 문법

[Extensions] 멤버의 확장 (계산 속성)

zerobugpark 2024. 12. 23. 23:42

익스텐션과 연산 프로퍼티

  • 익스텐션을 이용하면 기존 객체에 프로퍼티를 추가할 수 있습니다. 단 추가할 수 있는 것은 연산프로퍼티로 제한되며, 저장 프로퍼티는 익스텐션을 통해 추가할 수 없습니다. 대신에 인스턴스 프로퍼티든 타입프로퍼티든 연산 프로퍼티라면 모두 추가할 수 있습니다.

인스턴스 계산 속성의 확장 (Apple 공식문서)

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}
    var description: String {
        return "\(self)km는 \(self.km)m, \(self)cm는 \(self.cm)m, \(self)mm는 \(self.mm)m"
    }
}
//입력된 실수값의 기본 단위를 미터(m)로 변경
2.km
5.5.cm
123.mm
7.0.description

// 이런 식으로 자료형의 기능을 확장해놓으면 다음과 같이 각 단위별로 값을 더해야할 때 매우 편리하다.
let distance = 42.0.km + 195.m
print("마라톤의 총 거리는 \(distance)m입니다.")

// 연산 프로퍼티 정의하는 과정에 숫자에 언더바(_)가 추가된 부분이 있는 자릿수 구분을 위한 것이며, 사용하지 않은것과 차이가 없다
1_000 == 1000 // true
1_00_0 == 100_0 // true
1_0_0_0 == 1000 // true
10_00 == 100_0 // true
  • 인스턴스자체에 즉, Double의 리터럴값에.(점) 문법을 사용하여 거리 변환을 수행하도록 만듦
  • Double 값 1.0  ===> "1 미터"를 나타내는 것으로 간주됨
  • ft 계산 속성은 Double 값을 3.28084로 나누어 피트에서 "미터로 변환"
  • 1 킬로미터는 Double 값에 1_000.00을 곱하여 "미터로 변환"
  • m 계산 속성이 self를 반환 (1.m 표현식은 Double값 1.0을 계산하는 것임) 

타입 연산 속성의 확장

extension Int {
extension Double {
    static var zero: Double {
        return 0.0
    }
}

Double.zero // 0.0

 

 

 

728x90

'iOS > Swift 문법' 카테고리의 다른 글

[Extensions] 생성자의 확장  (0) 2024.12.26
[Extensions] 멤버의 확장(메서드)  (0) 2024.12.23
[Extensions] 확장  (0) 2024.12.23
Any, AnyObject  (0) 2024.12.19
타입과 다형성  (0) 2024.12.19