extension Type { // Type : 확장할 형식 이름 // 추가할 멤버 // 추가가능한 멤버 종류 computedProperty computedTypeProperty instanceMethod typeMethod initializer subscript nestedType } extension Type: Protocol, ... { // 기존 형식에 protocol 구현 추가 // requirements }
extension 으로 확장가능한 대상
- class, structure
- int나 string 혹은 이들로 구현돼 있으면 익스텐션을 통해 기존 자료형에 새로운 멤버 추가 가능
- enumeration, protocol
overriding members 불가
struct Size {
var width = 0
var height = 0
}
/* 1. 기존 속성 접근 */
extension Size {
var area: Double {
return width * height
}
// extension 에서 기존 속성에 접근 가능
}
let s = Size ()
s.width
s.hegight
s.area
/* 2.프로토콜 추가 */
extension Size: Equatable {
public static func == (lshL size, rhsL Size) -> Bool {
return lhs.width == rhs.width && lhs.height == rhs.height
}
}
/* 3.Adding Properties - 계산 속성 추가 */
extension Date {
var year: Int {
let cal = Calender.current
return cal.component(.year, from : self)
}
}