기존 존재하는 구조체, 클래스, 열거형 등의 객체에 새로운 기능을 추가
제약사항
extension Double{
var km:Double{return self*1_000.0}
var m:Double{return self}
var cm:Double{return self/100.0}
var mm:Double{return self/1_000.0}
var description:String{
return "asdf"
}
}
2.km
5.5.cm
125.m
let distance = 42.0.km+195.m
print("\\(distance)") //42195.0
기존 객체에 존재하는 메소드를 익스텐션에서 재정의하는 것은 허용하지 않음
extension Int{
func repeatRun(task: () -> Void){
for _ in 0..<self{
task()
}
}
}
let d = 3
d.repeatRun {
print("hello world!")
}
/*
hello world!
hello world!
hello world!
*/
델리게이트 페턴 구현에 사용되는 프로토콜 관련 코드를 익스텐션을 이용해 정리 할 수 있음
class MyViewController : UIViewController{
}
//MARK: 테이블 뷰 델리게이트
extension MyViewController : UITableViewDelegate,UITableViewDataSource{
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
<#code#>
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
<#code#>
}
}
//MARK: 텍스트뷰 델리게이트
extension MyViewController : UITextViewDelegate{
}
프로토콜 관련 메소드를 다음처럼 외부로 빼서 해결 가능함