안녕하세요. 이번 글에서는 Swift에서 강력한 기능인 Extension에 대해서 간단하게 정리하려고 합니다.
Extension이란
쉽게 말해서 새로운 기능을 추가한다는 개념입니다.
어떤 것들을 추가할 수 있나요?
Computed Properties(연산 속성)
Double 타입에 km라는 연산 속성을 추가하는 예제입니다.
extension Double {
var km: Double {
return self * 1_1000.0
}
}
하지만 저장 속성은 추가할 수 없습니다. 그 이유는 추가하기 위해서는 새 값을 저장하기 위해 추가 메모리가 필요한데 extension은 그런 작업을 관리 할 수 없습니다.
Initializers(이니셜라이저)
Default Initializers는 추가할 수 있습니다.
하지만 designated initializers, deinitializers를 추가할 수 없습니다.
Methods(메소드)
인스턴스 메소드, 타입 메소드를 추가할 수 있습니다.
extension Double {
// 인스턴스 메소드
func convertToInt() -> Int {
return Int(self)
}
// static 타입 메소드
static func print() {
print("print static method")
}
}
Mutating Instance Method도 추가할 수 있습니다.
extension Double {
mutating func multiple() {
self = self * 2
}
}
Subcripts(서브스크립트)
기존 타입에 새로운 서브스크립트를 추가할 수 있습니다.
Int타입에 정수 서브스크립트를 추가하는 예제이고 [n]은 n번째 숫자를 반환.
extension Int {
subscript(var digitIndex: Int) -> Int {
var decimalBase = 1
while digitIndex > 0 {
decimalBase *= 10
--digitIndex
}
return (self / decimalBase) % 10
}
}
746381295[0]
// returns 5
746381295[1]
// returns 9
746381295[2]
// returns 2
746381295[8]
// returns 7
Nested Types(중첩 타입)
클래스, 구조체, 열거형에 새로운 중첩 타입을 추가할 수 있습니다.
extension Int {
enum Kind {
case Negative, Zero, Positive
}
var kind: Kind {
switch self {
case 0:
return .Zero
case let x where x > 0:
return .Positive
default:
return .Negative
}
}
}
참고
http://minsone.github.io/mac/ios/swift-extensions-summary
'Swift' 카테고리의 다른 글
[Swift] rethrows란 (0) | 2020.02.23 |
---|---|
[Swift] 에러처리 전략 (2) | 2020.02.23 |
[Swift] SwiftLint 적용하기 (0) | 2020.01.05 |
[Swift] Extension(확장)으로 코드 가독성 올리기 (0) | 2020.01.05 |
[Swift] 구조체란 무엇인가? (0) | 2020.01.03 |