Architecture (swift)/RIBs
[iOS - swift] 3. RIBs의 구조, RIB 생성, attach/detach 흐름
jake-kim
2021. 4. 20. 00:17

Delegate 기초 개념
- 데이터를 주는 쪽에서 클래스 내부에 protocol을 선언, 데이터를 받는 쪽에서 protocol 구현
ex) LoggedOutInteractor의 LoggedOutRouting과 같이, 클래스 내부에 프로토콜을 선언하는 경우 - RIBs에서 버튼을 탭할때 데이터를 보내는 기능을 구현할 경우
- VC -> Interactor로 데이터 보내기: ViewController의 PresentableListener에 tap() 함수 선언
- Interactor에서 PresentableListener 프로토콜 구현
- VC에서 버튼 이벤트가 발생하는 경우 프로퍼티로 선언된 PresentableListener객체의 함수 실행
parent와 child간 데이터 교환
- child -> parent: Interface Listner 사용
- ChildInteractor에서 선언된 LoggedOutListener사용
- ParentBuilder의 Dependency 프로토콜에서 받는 것
(extension하고 있는 파일인 ParentComponent+ChildDependency.swift에 정의)
RIB 생성 방법
- RIB 생성
- 부모의 Router에 프로퍼티 적용: 생성된 child Builder 프로퍼티 추가, init에 포함
- dependency적용: Builder를 만들어낼때 인수로 component 주입이 필요하고 이 component는 parentComponent 속성을 따르고 있으므로 parentComponent+childComponent 파일 생성하여 적용
- 부모의 Builder에 변경된 Router내용 적용
viewless RIB의 attach, detach 처리
- 부모의 Router에서 didLoad()시 attach
- 부모의 Router에서 attach 로직
- Builder를 통해 child 생성 (오류 -> interactor가 주입되는데, 부모Interactable에 ChildListener 적용하여 해결)
- currentChild로 지정
- present
view가 존재하는 RIB의 attach, detach 처리
- 부모 Interactor에서 (p)Routing에 routeToChild() 선언
- 부모 Router에서 routeToChild() 구현
- 현재 child가 존재하면 detachCurrentChild(): child존재 -> detachChild -> dismiss
- Builder를 통해 child 생성 (오류 -> interactor가 주입되는데, 부모 Interactable에 ChildListener 적용하여 해결)
- currentChild = child
- attachChild(child)
- present
* 좋은 예제: ios-development.tistory.com/429
[iOS - swift] 5. RIBs 튜토리얼 2 - 3 (LoggedIn에 OffGame 붙이기)
LoggedIn에 OffGame 붙이기, 이동 OffGame 생성 OffGame RIB 그룹, 파일 생성 UI: raw.githubusercontent.com/uber/ribs/assets/tutorial_assets/ios/tutorial2-composing-ribs/source/source2.swift 부모인 L..
ios-development.tistory.com