본문 바로가기

Swift

[Swift] Extension

Extension

- 구조체, 열거형, 클래스, 프로토콜 타입에 기능을 추가할 수 있는 기능

- 기능 추가는 가능하나, 기존 기능들은 재정의는 불가능

 

 

📌 추가할 기능 정의

extension 확장할타입이름 {
}

기존에 존재하는 타입이 추가적으로 다른 프로토콜들을 채택할 수 있게도 정의 가능

extension 확장할타입이름: 프로토콜1, 프로토콜2, 프로토콜3... {
    /* 프로토콜 요구사항 구현 */
}

 

 

 

 

🚀 Extension 구현하기

1) Int 타입에 두개의 연산 프로퍼티 추가 (isOdd, isEven)

extension Int {
    var isEven: Bool {
        return self % 2 == 10
    }
    var isOdd: Bool {
        return self % 2 == 1
    }
}


print(1.isEven) // false
print(2.isEven) // true
print(1.isOdd)  // true
print(2.isOdd)  // false

var number: Int = 3
print(number.isEven) // false
print(number.isOdd) // true

number = 2
print(number.isEven) // true
print(number.isOdd) // false

static 키워드를 통해 타입 프로퍼티도 추가 가능

 

 

 

2) 메서드 추가 (multiply(by:))

extension Int {
    func multiply(by n: Int) -> Int {
        return self * n
    }
}

print(3.multiply(by: 2))  // 6
print(4.multiply(by: 5))  // 20

number = 3
print(number.multiply(by: 2))   // 6
print(number.multiply(by: 3))   // 9

 

 

3) 이니셜라이저 추가

extension String {
    init(int: Int) {
        self = "\(int)"
    }
    
    init(double: Double) {
        self = "\(double)"
    }
}

let stringFromInt: String = String(int: 100)
// "100"

let stringFromDouble: String = String(double: 100.0)
// "100.0"

 

 


Reference

야곰의 스위프트 기본 문법 강좌

'Swift' 카테고리의 다른 글

[Swift] 모나드, 옵셔널 !  (0) 2022.09.17
[Swift] Protocol  (0) 2022.08.24
[Swift] lazy?  (0) 2022.08.21
[Swift] Any / AnyObject  (0) 2022.08.14
[Swift] 타입캐스팅 : is, as  (0) 2022.08.13