목록SwiftUI - 기초 (55)
기어가더라도 제대로
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/FhuyZ/btsMgtoayHx/VaoABizU2z7gghacTdUWk0/img.gif)
현재 진행중인 프로젝트가 UIKit 베이스에 새로 추가되는 화면은 SwiftUI로 구현을 하고 있는데, 이 때 가져갈만한 UI 패턴을 뭘로하기가 적당할까 고민이 들었다. UIKit으로만 이루어진 프로젝트라면, Input-Output 구조를 가진 MVVM을 사용했을텐데, 새로운 SwiftUI 환경에서 적합하게 사용하기가 어려웠다. (@Published 프로퍼티 래퍼를 어떻게 해야 좋단말인가..) SwiftUI는 상태의 변화에 집중하는 시스템이니까 State를 가지고 그 상태를 변화를 감시하는 구조를 찾아 정리한다. 만드려는 것 간단한 카운터 앱+ 버튼을 누르면 1 더하기- 버튼을 누르면 1 빼기 ViewModel 구현ViewModel을 해도 어떤 뷰모델을 사용하겠다 명확하게 프로토콜로 인터페이스를 구성해준..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/dA7sHd/btsL26sD5ol/FPOLkNOs6VUrZoYQ54Rjyk/img.gif)
개념iOS 16 이후에 제안된 화면 전환 로직을 담당하는 뷰루트 뷰 위에 스택 처럼 화면을 쌓는다 해서 Stack특징: 가장 상위 화면까지 오는 그 흐름을 추적 가능한번에 스택의 어떤 화면으로 이동 가능해 딥링크 같은 기술에 응용 가능 path라는 개념을 도입하고, View와 Data를 엮어서 추적하는 방식을 사용 같은 데이터 타입끼리의 화면 이동화면이 쌓이는 경우를 추적하지 않는다하면, NavigationStack(root:)로 이니셜라이징추적을 한다면 NavigationStack(path:,root:)로 이니셜라이징이 예제에서는 숫자를 표시해주는 NumberView를 쌓음화면이 쌓이는 것을 추적하기 위해 presentedNumbers 추가struct ContentView: View { @State p..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/kOlOf/btsLYMaiXNV/z6aTNvks0XHBLlA47FQiE1/img.jpg)
상황 설명뷰 컨트롤러에서 뷰 모델의 스트림을 구독을 하고 뷰에서 이벤트를 트리거했을 때, 이벤트 스트림 내부에서 VM의 같은 프로퍼티를 참조했을 때 값이 나타나질 않았다. 같은 Source of Truth 인데 이런 차이가 발생하는 이유가 무엇일까?import Combineimport UIKitclass FooViewModel: ObservableObject { @Published var data: String? func setData() { data = "New Data" }}class FooViewController: UIViewController { let vm: FooViewModel var cancellab..