관리 메뉴

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

[iOS - swift] 6-1) RIBs 구조 Todo 앱 만들기 (attach child, Listener Interface) 본문

Architecture (swift)/RIBs

[iOS - swift] 6-1) RIBs 구조 Todo 앱 만들기 (attach child, Listener Interface)

jake-kim 2021. 4. 28. 23:45

0) 프로젝트 초기 세팅

1) Todo 앱 구조, LoggedOut RIB

2) Todo 앱 LoggedIn RIB

3) Todo 앱 Rx Stream

Todo 앱 구조

LoggedOut RIB 추가

LoggedOut

Builder의 핵심

  • build()를 호출하는 쪽은 Router이며, build()반환값은 ~Routing이고 이 객체를 화면전환에 사용한다는 것이 중요
    • viewControllable: ~Routing객체.viewControllable
    • ParentRouter에서 ChildBuilder 저장하지만 build() 결과로 나온 ViewableRouting형태의 객체도 저장
      (detach 사용하기 위함)

RIB을 새로 생성하면서 Parent에서 해줘야 할 것

  • 부모 Router에 private let builder 프로퍼티로 선언, init에도 반영
    • (오류) 부모 Builder에서 Router를 반환할 때 위에서 추가된 init구문에 맞추어서 추가
    • (오류) 위에서 새로 만들어진 자식 Builder dependency component 부모 성격만 가지고 있으므로, 새로 추가: ParentComponent+ChildComponent.swift

Root RIB -> Child RIB 화면 전환

  • RootRouter에 private var ChildName: ViewableRouting? 선언
  • RootRouter의 didLoad()에서 routeToChild() 호출
     // RootRouter.swift
     
     private func routeToLoggedOut() {
        let loggedOut = loggedOutBuilder.build(withListener: interactor)
        self.loggedOut = loggedOut
        attachChild(loggedOut)
        
        // present함수 프로토콜은 RootViewControllable에 존재 (RootRouter.swift), 구현은 RootViewController.swift 에서 수행
        viewController.present(viewController: loggedOut.viewControllable) 
     }
  • (오류): interactor는 부모 성격이므로 ParentInteractable 프로토콜에 ChildListener 성격 추가
  • present 추가: ParentViewController에서 진행되므로, ParentRouter파일 안의 ParentViewControllable에 함수 정의 
  • (오류) ParentViewController에서 present 구현 
  • 소스코드

LoggedOut RIB UI 추가

LoggedOutViewController 이벤트 처리

  • LoggedOutViewConroller에서 버튼 탭 시 LoggedOutInteractor에서 로직 처리
    • ViewController의 LoggedOutPresentableListener 프로토콜에 함수 선언
    • (오류) LoggedOutInteractor에서 구현
    • 코드
  • LoggedOutInteractor에서 로그인 수행 후 listener를 통해 RootInteractor에서 처리
    • LoggedOutInteractor의 LoggedOutListener 프로토콜안에 didLogin 함수 선언
    • (오류) RootInteractor에 didLogin 구현
    • 코드

* 정리

  • Add new RIB -> parent Router에 새로운 RIB의 Builder를 private let으로 선언, init 적용 
  • Attach
    • ViewFul -> Parent Router에서 나중에 detach시키기 위해 private var childName: ViewalbleRouting 선언, 저장
    • Viewless
  • LoggedOutViewController 버튼 탭 -> (p) LoggedOutPresentableListenr -> LoggedOutInteractor에서 Login처리
  • LoggedOutInteractor에서 login처리 -> (p) LoggedOutListener -> RootInteractable에서 didLogin처리

 

Comments