목표
- 부모 RIB와 통신하는 자식 RIB 생성
- 부모의 인터랙터가 원하면 자식 RIB를 탈부착하기
- view-less RIB 만들기
- 부모 RIB가 처음 로드될 때 자식 RIB를 첨부하기
- RIB 유닛 테스팅
산출물
어떤 형태
이런 형태
프로젝트 구조
플로우
플레이어가 로그인 -> 스타트 게임 버튼을 누른다. 이때 LoggedOut 이 Root RIB에게 사용자의 로그인 액션을 알려줄 것이다. 그 뒤 root router가 LoggedOut에서 LoggedIn RIB로 제어권을 넘겨 줌. loggedIn 은 뷰리스 RIB라서 딱히 보여주는건 없고 그냥 LoggedOut에서 OffGame의 뷰를 보여주기만 한다. root router는 LoggedOut의 인터랙터의 리스너로 여겨지고 이것을 통해 LoggedOut에서 Root로 로그인 이벤트를 진행해야한다.
일단 LoggedOut RIB이 루트에게 플레이어가 로그인 하였다는 사실을 알릴 수 있도록 LoggedOutListener를 만든다. 이것이 로그드 아웃 립의 상위 립에게 디드로그인 함수를 구현하고 컴파일러가 부모와 자식간의 계약을 시행하도록 한다. 로그드아웃 인터랙터 내에 로그인 기능 구현을 변경하여 새로 선언된 리스너 콜을 추가한다. 그러면 리스너가 RIB 뷰 컨트롤러의 로그인 버튼을 누르는 것을 알 수 있다.
protocol LoggedOutListener: class {
func didLogin(withPlayer1Name player1Name: String, player2Name: String)
}
func login(withPlayer1Name player1Name: String?, player2Name: String?)
또 사용자가 로그인 한 후 루트 RIB는 로그드아웃에서 로그드인으로 전환하여야 한다. 이때 사용되는 라우팅 코드를 로그드인 RIB에 작성한다.
프로토콜 루트라우팅:
이것으로 루트인터랙터와 루트라우터의 계약이 성립된다.