일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- UICollectionView
- RxCocoa
- 스위프트
- ios
- Refactoring
- rxswift
- UITextView
- SWIFT
- Xcode
- ribs
- clean architecture
- 리펙토링
- Human interface guide
- Observable
- MVVM
- Clean Code
- Protocol
- collectionview
- 리팩토링
- 애니메이션
- HIG
- map
- uitableview
- tableView
- 클린 코드
- combine
- 리펙터링
- swiftUI
- swift documentation
- uiscrollview
- Today
- Total
목록Architecture (swift) (34)
김종권의 iOS 앱 개발 알아가기
0) 프로젝트 초기 세팅 1) Todo 앱 구조, LoggedOut RIB 2) Todo 앱 구조 LoggedIn RIB 3) Todo 앱 구조 Rx stream 이전까지 진행된 점 (child RIB 추가) 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처리 Log..
MVC 구성 View는 Controller와 상호작용 하지만, Controller의 인터페이스를 알지 못하며 직접 호출하지 않는 구조 MVC끼리의 통신 MVC 애플의 지향: 최소한의 구성 요소만 포함 old MVC의 한계: Massive ViewController, DI 프로그래밍 x, 프로토콜 지향 프로그래밍 x 한계 극복 Delegate, DataSource를 Model에 두고, ViewController 비즈니스 로직을 간소화 Coordinator가 포함된 MVC패턴 MVC의 원칙 Model: 앱의 데이터 네트워크 코드: 네트워크 통신은 되도록 단일 클래스 사용 지속성 코드: DB, Core Data 코드 파싱: codable Manager 클래스 (=Wrapper class) DataSource,..
0) 프로젝트 초기 세팅 1) Todo 앱 구조, LoggedOut RIB 2) Todo 앱 LoggedIn RIB 3) Todo 앱 Rx Stream Todo 앱 구조 LoggedOut RIB 추가 Builder의 핵심 build()를 호출하는 쪽은 Router이며, build()반환값은 ~Routing이고 이 객체를 화면전환에 사용한다는 것이 중요 viewControllable: ~Routing객체.viewControllable ParentRouter에서 ChildBuilder도 저장하지만 build()의 결과로 나온 ViewableRouting형태의 객체도 저장 (detach할 때 사용하기 위함) RIB을 새로 생성하면서 Parent에서 해줘야 할 것 부모 Router에 private let bui..
RIBs 설치 프로젝트 생성 pod 설치 - pod 'RIBs'할 경우 RxSwift버전은 4.x버전으로 설최되므로, tag를 명시하여 RxSwift 5.x버전이 받아지도록 설정 pod 'RIBs', :git => 'https://github.com/uber/RIBs.git', :tag => '0.9.2' storyboard, SceneDelegate 삭제 storyboard 삭제 Main.storyboard 삭제 target의 main interface 에서 설정된 스토리보드 해제 SceneDelegate 삭제 SceneDelegate.swift 삭제 info.plist에 Application Scene Manifest 삭제 AppDelegate.swift에 UISsceneSession Lifecycl..
원리 LaunchGameWorkflow에서 Rx로 진행 로직 구현 각 Interactor는 -ActionableItem 프로토콜을 구현 RootActionableItem: 로그인을 기다리다가 끝날 경우 로직 수행 LoggedInActionableItem: 바로 game을 시작하도록 로직 수행 url 스킴 등록 URL: ribs-training://launchGame?gameId=ticTacToe info.plist에 등록 CFBundleURLTypes CFBundleURLName com.uber.TicTacToe CFBundleURLSchemes ribs-training UrlHandler AppDelegate에 프로토콜 선언 -> RootInteractor에서 프로토콜 구현 -> RootBuilder에..
Root -> LoggedIn 플레이어 이름 DI LoggedInBuildable에 받을 데이터 기입 (이름정보) // LoggedInBuilder.swift protocol LoggedInBuildable: Buildable { func build(withListener listener: LoggedInListener, player1Name: String, player2Name: String) -> LoggedInRouting } 변경내용 반영 // LoggedInBuilder.swift func build(withListener listener: LoggedInListener, player1Name: String, player2Name: String) -> LoggedInRouting { let co..
LoggedIn에 OffGame 붙이기, 이동 OffGame 생성 OffGame RIB 그룹, 파일 생성 UI: raw.githubusercontent.com/uber/ribs/assets/tutorial_assets/ios/tutorial2-composing-ribs/source/source2.swift 부모인 LoggedIn에 OffGame Builder 프로퍼티 추가 Router에 새로운 Builder 프로퍼티 추가 // LoggedInRouter.swift private let offGameBuilder: OffGameBuildable init(interactor: LoggedInInteractable, viewController: LoggedInViewControllable, offGameBui..
RIB 라우팅 (LoggedOut -> LoggedIn) RootRouting protocol에 LoggedIn RIB으로 화면전환 관련 함수 선언 // RootInteractor.swift protocol RootRouting: ViewableRouting { func routeToLoggedIn(withPlayer1Name player1Name: String, player2Name: String) } LoggedOutListener를 통해서 RootInteractor에 didLogin 이벤트를 받은 경우, 화면전환 // RootInteractor.swift func didLogin(player1Name: String, player2Name: String) { router?.routeToLoggedIn..