Connect 앱에서 FloatingPanel을 보여주는 부분을 서로 다른 floatingType을 Init의 인자로 받아 각각에 따라 맞는 화면을 띄어주는 것으로 코드를 하였다
그러다가 검색바를 이용해 지역을 검색하는 .searchResult 타입인 경우에만 따로 KakaoAPI를 통해 받아온 결과값을 인자로 넘겨줘야하는 상황이다
.who, .study, .searchResult 3개의 타입 모두 floatingType을 동일하게 받지만 .searchResult만 다른 하나의 인자를 더 받는 것이다
Designated Init은 우리가 평소에 사용해왔던 Init메소드를 일컫는다
굳이 Designated를 붙일 필요없이 평소처럼 사용해줄 수 있다
Designated Init의 특징은 상속받고 있는 클래스를 반드시 super.init을 통해 초기화시켜줘야하는 특징이 존재한다
init(floatingType: FloatingType) {
self.floatingType = floatingType
super.init(nibName: nil, bundle: nil)
}
Convenience Init은 반드시 init앞에 convenience라는 키워드를 붙여주어야한다
이 Init메소드는 Designated Init과 다르게 상속하는 부모클래스의 init을 호출할 필요없이 해당 클래스의 Designated Init을 이용하여 일부 초기화시켜주어야한다
convenience init(kakaoAddressResults: [KakaoMapAddress]) {
self.init(floatingType: .searchResult)
self.kakaoAddressResults = kakaoAddressResults
}
convenience init의 사용때를 위 코드를 예시로 설명을 하자면 굳이 init의 인자로 넘길 필요없이 동일한 인자를 넘겨야할 경우 사용된다
위에서 설명했던 것처럼 .searchResult인 경우에만 [KakaoMapAddress]를 넘겨주기때문에 [KakaoMapAddress]를 넘기는 경우는 반드시 floatingType이 .searchResult여야만 한다