Struct
인데, Int
에 추가적인 기능을 추가하고 싶을때 extension
을 사용할 수 있다. extension 확장할 타입 이름 {
//타입에 추가될 새로운 기능 구현
}
extension 확장할 타입 이름: 프로토콜1, 프로토콜2, 프로토콜3 {
//프로토콜 요구사항 구현
}
새로운 계산된 속성(Computer Property) 추가
extension String {
var length: Int {
return self.count
}
}
새로운 인스턴스/타입 메서드 추가
extension Int {
func squared() -> Int {
return self * self
}
}
새로운 초기화(Initializer) 추가
extension Double {
init(fromString str: String) {
self = Double(str) ?? 0.0
}
}
프로토콜 채택 (Protocol Confomance) -> 이거는 코드 정리용 기능적으로 다른게 없음.
protocol Printable {
func printDescription()
}
struct MyStruct(){
...
}
extension MyStruct : Printable{
func printDescription(){
print("This is My Struct")
}
}
서브스크립트 추가 (Subscripting)
struct Matrix {
private var data: [[Int]]
init(rows: Int, columns: Int) {
data = Array(repeating: Array(repeating: 0, count: columns), count: rows)
}
}
extension Matrix {
subscript(row: Int, column: Int) -> Int {
get {
return data[row][column]
}
set {
data[row][column] = newValue
}
}
}
var matrix = Matrix(rows: 3, columns: 3)
matrix[0, 0] = 1
matrix[1, 1] = 2
print(matrix[0, 0]) // 출력: 1
print(matrix[1, 1]) // 출력: 2
중첩 타입(Nested Type) 추가
struct Container {
...
}
extenstion Container {
struct NestedContainer{
...
}
}