defining extension
extension SomeType { //Add new functionality }
위의 코드는 Double을 소수점 3자리 까지 자르고 싶은 경우이다.
myDouble에 1000을 곱하고 소수점 아래자리를 자르고 1000을 나누어 3.141 을 표현 할 수 있다.
(round 메서드는 소수점 아래자리를 다 자르기 때문이다.)
그래서 extension을 통해 원하는 소수점 자리 수 만큼 자를 수 있는 메서드 round(to places: )를 만든다.
- pow(밑, 지수)는 제곱근 함수이고, 지수인 places에 'Double'을 붙인 이유는 'presionNumber'의 data type이 double이기 때문이다.
- var n = self는 myDouble을 의미한다.
=>코드의 최하단에 myDouble.roudn(to: )에 의해 표현하고 싶은 만큼의 소수점자리 까지 표현 가능한 메서드가 작동함을 알 수 있다.
UIButton은 오픈소스가 아닌 데이터타입이다.
사각형의 버튼을 동그랗게 만들기 위해서는 위와 같은 과정이 필요하다.
버튼을 동그랗게 만드는 메서드를 만들어보자.
위의 코드와 같이 extension을 통해 메서드를 작동하고자 하는 메서드 상단에 만들어 주고 이 메서드를 호출하면 추가적으로 만든 메서드가 작동한다.
protocol CanFly {
func fly()
}
extension CanFly {
func fly() {
print("The object can takes off into the air")
}
}
class Bird {
}
위의 코드와 같이 protocol을 정의하고 바로 아래에 이를 extension하면 class의 inheritance와 같은 특성처럼 CanFly protocol을 adopt한 class, structure는 추가적인 코드 작성없이 protocol CanFly의 기능을 한다.