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 |