본 내용은 '스위프트 프로그래밍' 책을 학습한 후 이를 바탕으로 작성한 글입니다.
extension 확장할 타입 이름 {
//타입에 추가될 새로운 기능 구현
}
extension 확장할 타입 이름: 프로토콜1, 프로토콜2, 프로토콜3 {
//프로토콜 요구사항 구현
}
extension
이라는 키워드를 사용하여 선언한다.static
키워드를 사용하여 타입 연산 프로퍼티도 추가할 수 있다.extension Int {
var isEven: Bool {
return self % 2 == 0
}
var isOdd: Bool {
return self % 2 == 1
}
}
print(1.isEven) //false
print(1.isOdd) //true
var number: Int = 2
print(number.isEven) //true
print(number.isOdd) //false
extension Int {
func multiply(by n: Int) -> Int {
return self * n
}
mutating func multiplySelf(by n: Int) {
self = self.multiply(by: n)
}
static func isIntTypeInstance(_ instance: Any) -> Bool {
return instance is Int
}
}
var number: Int = 3
number.multiply(by: 2)
print(number) //3
number.multiplySelf(by: 3)
print(number) //9
number.multiplySelf(by: 3)
print(number) //27
print(Int.isIntTypeInstance(number)) //true
extension String {
init(intTypeNumber: Int) {
self = "\(intTypeNumber)"
}
init(doubleTypeNumber: Double) {
self = "\(doubleTypeNumber)"
}
}
let stringFromInt: String = String(intTypeNumber: 100)
let stringFromDouble: String = String(doubleTypeNumber: 100.0)
print(stringFromInt) //100
print(stringFromDouble) //100.0
class Person {
var name: String
init(name: String) {
self.name = name
}
}
extension Person {
convenience init() {
self.init(name: "Unknown")
}
}
let someOne: Person = Person()
print(someOne.name) //Unknown
extension String {
subscript(appedValue: String) -> String {
return self + appedValue
}
subscript(repeatCount: Int) -> String {
var str: String = ""
for _ in 0..<repeatCount {
str += self
}
return str
}
}
print("abc"["def"]) //abcdef
print("abc"[3]) //abcabcabc