익스텐션?
-
구조체, 클래스, 열거형 타입에 새로운 기능을 추가할 수 있음
- 클래스의 상속은 특정 타입을 물려받아 하나의 새로운 타입을 정의하고 추가 기능을 구현하는 수직 확장
- 익스텐션은 기존의 타입에 기능을 추가하는 수평 확장
- 그렇기 때문에, 익스텐션은 타입에 새로운 기능 추가 O 재정의 X
-
내부의 구체적인 구현은 몰라도 타입만 안다면, 해당 타입의 기능을 확장할 수 있다.
- 외부 라이브브러리나 프레임워크에 있는 타입도 가능
- 스위프트 표준 라이브러리도 대부분 익스텐션으로 구현되어 있음.
-
추가 가능한 기능 리스트
- 연산 타입 프로퍼티 (static)
- 연산 인스턴스 프로퍼티
- 인스턴스 메서드 / 타입 메스더
- 이니셜라이저
- 클래스 타입에 편의 이니셜라이저는 추가 O, 지정 이니셜라이저는 추가 X, 디이니셔라이저도
- 값타임은 상관없음, 다만 이니셜라이저를 추가했을 때, 모든 저장 프로퍼티에 기본값이 있거나 타입에 기본 이니셜라이저와 멤버와이즈 아니셜라이저 외에 추가 사용자 정의 이니셜 라이저가 없다면, 기본과 멤버와이즈 이니셜라이저를 Extension에서 호출 할 수 있다.
- 서브스크립트
- 중첩 데이터 타입 : Extension 안에 중첩 데이터 타입을 가질 수 있다.
- 특정 프로토콜을 준수할 수 있도록 하는 기능 추가
extension 타입 이름 : 프로토콜1, 프로토콜2, TableViewDelegate {
var typeToString: String {
return "\(self.rawlavlue)"
}
convenience init() { }
subscript
struct NewStruct {
}
func tableview(_ tableView: UITableView, dequeueReusableCell:) { }
}