일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
- UITextView
- 스위프트
- Clean Code
- collectionview
- clean architecture
- ribs
- Xcode
- tableView
- swift documentation
- map
- 애니메이션
- rxswift
- 리팩토링
- SWIFT
- uitableview
- MVVM
- HIG
- ios
- combine
- Human interface guide
- swiftUI
- uiscrollview
- Protocol
- Refactoring
- UICollectionView
- 클린 코드
- 리펙토링
- RxCocoa
- Observable
- 리펙터링
- Today
- Total
목록Architecture (swift) (34)
김종권의 iOS 앱 개발 알아가기
튜토리얼 RIB 트리 현재 LoggedOut RIB 구현 완료 새로 만들어질 LoggedIn RIB은 View가 없는 RIB 플로우: LoggedIn에서 로그인이 성공 > OffGame에서 start button 탭 -> TicTacToe RIB의 뷰 표출 Child -> parent 데이터 넘기기 (Listener Interface) 내용: LoggedOutViewController에서 플레이어 1, 2이름을 입력 후 로그인 -> LoggedInRIB을 통해 TicTacToe 게임 ViewController 화면이 유저에게 표출 LoggedOut RIB이 Root RIB에게 로그인 완료 상태 알림 LoggedOutViewController에서 유저가 Login 탭 -> LoggedOutInteracto..
Delegate 기초 개념 데이터를 주는 쪽에서 클래스 내부에 protocol을 선언, 데이터를 받는 쪽에서 protocol 구현 ex) LoggedOutInteractor의 LoggedOutRouting과 같이, 클래스 내부에 프로토콜을 선언하는 경우 RIBs에서 버튼을 탭할때 데이터를 보내는 기능을 구현할 경우 VC -> Interactor로 데이터 보내기: ViewController의 PresentableListener에 tap() 함수 선언 Interactor에서 PresentableListener 프로토콜 구현 VC에서 버튼 이벤트가 발생하는 경우 프로퍼티로 선언된 PresentableListener객체의 함수 실행 parent와 child간 데이터 교환 child -> parent: Inter..
템플릿 세팅 git clone: github.com/uber/RIBs 템플릿 설치 $ cd RIBs/ios/tooling $ /install-xcode-template.sh Xcode의 템플릿 확인 튜토리얼의 RIB 트리 LoggedOut RIB 추가 * storyboard를 사용할 경우, 아래 "RIBs에서 storyboard 사용 방법" 참고 LoggedOutBuilder LoggedOutBuildable protocol을 사용하여 mock을 만들 수 있는 구성 LoggedOutInteractor LoggedOutRouting protocol로 Router와 통신 LoggedOutListener protocol은 Router와 연결되어 있으며 Router에서 부모 RIB에 데이터 전달 LoggedOu..
RIBs 아이디어 view가 아닌 business logic 중심 구조 state변화는 view가 아닌 business logic에서 관리 하나의 화면이 여러 ViewController로 이루어질 수 있다는 점이 존재 State관리는 scope를 이용하여 관리 (isolation) 모듈화에 의해 co-working에 유리: dependency가 제대로 inject되어 있다면 각 RIB을 합치기 쉬운 장점 RIB - 6개의 컴포넌트로 이루어진 하나의 기능 단위 (Required) Router: RIB이 어떻게 attach, detach될 것인지 (animation) Interactor: 비즈니스 로직 관리, 어떤 RIB들을 attach, detach 할지 명령 Builder: RIB 생성 (Mock에 유리..
uber가 RIBs를 만든 이유 - 모듈화 MVC를 사용할 때 새로운 기능이 늘어나며 앱의 복잡성 증가 모듈이 증가할수록, 테스트 하기 점점 어려워지는 현상 4년동안 MVC패턴 사용 -> 관리하기가 힘든 scale (하나의 ViewController파일에 300줄 -> 3000줄) massive view controllers (비즈니스 로직, 데이터 변경, 데이터 검증, 네트워크 로직, 라우팅 로직) 테스트가 어려운 구조 (if-else문으로 테스트) VIPER 아키텍처 View Interactor: 비즈니스 로직포함, API나 DB로 Data르 받아서 Entity(모델) 생성 Presenter: View에서 유저 앣견을 받고, Interactor에 data를 요창하여 VIew에 그려주는것을 다시요청 E..
Clean swift MVVM의 단점 보완: 모든 부분에서 Reactiveness가 필요하지 않음 VIPER의 단점 보완: 사용자의 액션, 모델 업데이트, 라우팅이 presenter에 몰려있음(massive) - Presenter: Interactor에서 발생되고 비지니스 로직과 관련있지만 UIkit과 관련없는 UI를 가짐 Clean Swift의 VIP 주기 VIP(View Controller, Interactor, Presenter) VIPER의 제어 흐름 문제 해결(양방향으로 로직이 순환해서 순환참조에 의한 메모리 누수): 단방향 제어 흐름 MVVM의 reactiveness 문제 해결: VIP cycle로 인해 interactor에 있는 클로저 기반 비동기 메소드들이 주기적으로 업데이트를 제공할 수 ..
* XCoordinator를 이용하여 모든 화면에서 NavigationController하나를 공유하며 화면전환 하는 방법 + 딥링크를 고려한 코드 스타일 적용 Xcoordinator개념편은 여기 참고 사전 지식 - XCoordinator에서는 strongRouter와 UnownedRouter가 있는데, 자식들을 계속 참조하며 잃지 않으려면 strongRouter로 사용 단, push와 같이 Transition을 반환하게 되면, strongRouter이후에 unownedRouter로 전달해도 참조를 잃지 않음 - Coordinator에서 다른 Coordinator로 이동 시키려면, addChild(_:) -> Transition함수를 정의하여 이 값을 리턴해야지만 deeplink가 가능한 구조 addCh..
Coordinator란 - 화면 전환하는 역할을 "Coordinator"라는 것에 부여 - viewModel에서 trigger를 통해 화면전환을 요청 Coordinator의 이점 화면간의 연결이 쉬움 DI이 쉬워짐 (의존성 주입을 통해 소크 코드 내부가 아닌 외부에 정의하도록 하여 의존성을 분리시키는 것) ViewController에서 네비게이션 코드 삭제 XCoordinator사용 XCoordinator프레임워크 import // pod install pod 'XCoordinator' // import import XCoordinator Coordinator가 될 클래스 정의 enum을 사용하여 화면에 전달될 인수(dependencies)를 함께 전달 NavigiationCoorinator 클래스 작성..