Notice
Recent Posts
Recent Comments
Link
관리 메뉴

김종권의 iOS 앱 개발 알아가기

[iOS - swift] 3. RIBs의 구조, RIB 생성, attach/detach 흐름 본문

Architecture (swift)/RIBs

[iOS - swift] 3. RIBs의 구조, RIB 생성, attach/detach 흐름

jake-kim 2021. 4. 20. 00:17

RIBs의 구조

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

Comments