본문 바로가기

SwiftUI4

@State값을 ModalView(FullScreen, sheet..) 에 주입시 유의점 배경 State값을 이용하여 특정 뷰를 보여주는 View를 보여주려고함. 하지만, State 값이 변하였음에도 불구하고 의도했던대로 동작하지 않음. 문제 재현 코드 struct ContentView: View { @State private var n = 1 @State private var show = false var body: some View { VStack { Text("\(n)") // Text("n = \(n)") // Comment out this line, and the n value displayed in the sheet will be 1 (not the expected 2) Button("Set n = 2") { n = 2 show = true } .buttonStyle(.border.. 2024. 1. 6.
@StateObject vs @ObservedObject 공통점 어떠한 목적을 가지고(로직분리, 테스트, 값 저장..) 유저 인터페이스에서 코드를 분리하기 위해 사용한다. ObservableObject 를 채택하고 있다. 차이점 가장 큰 차이점은 View가 재생성 될때 나타난다. SwiftUI는 매우 빈번하게 View를 재생성하게 되는데, 이때 View안에서 @ObservaedObject를 생성하게 되면 View가 재생성 될때마다 같이 초기화가 되기 때문에 예상치 못한 결과를 얻을 수 있다. 이를 해결하기 위해 apple은 @StateObject를 추가한 것 같다. @StateObject는 주어진 View 인스턴스가 얼마나 재생성 되는지에 상관없이 관리 할 수 있게 해준다. struct LibraryView: View { @ObservedObject priva.. 2024. 1. 2.
Building Custom View with SwiftUI(WWDC19) - 2 지난 편에 이어서 SwiftUI의 Layout을 더 알아보자. 지난편에서 SwiftUI의 기본적인 Layout을 보았다면, 이번에는 좀 더 복잡한 View를 살펴본다. 들어가기 앞서.. -복습 UIKit과는 다르게 SwiftUI는 View자체의 Size로 layout을 설정한다. 우리가 익히 알던 Constraint가 없는 것이다. 따라서... Frame은 더이상 제약조건(Constraint)이 아니라 하나의 View로 인식해야한다. Child들에게 사이즈를 제안을 할 수 있지만 결국 Child가 자신의 크기를 선택한다. 물론, 부모보다 Child가 더 큰 사이즈를 가지게 되면 짤려 보이겠지만.. 부모가 child의 사이즈를 결정할 수 없다는 게 포인트! SwiftUI로 어떻게 구현할 수 있을까? Sta.. 2022. 11. 12.
Building Custom View with SwiftUI(WWDC19) - 1 SwiftUI는 UIKit에 비해 상당히 편하게 View를 만들어준다. 하지만, 조금만 Custom하려고 하면 상당히 애를 먹곤 했었는데, WWDC의 내용을 보면서 조금씩 기초를 이해 해보자. 기본 레이아웃 규칙 SwiftUI의 Layout에는 다음과 같은 규칙이 기본적으로 있다. 간단하게 Hello World를 가지고 있는 TextView를 보여준다고 해보자. 예시의 View Hierarchy는 위와 같을 것이다. 하지만 ContentView는 중립 상태이기 때문에 항상 body의 크기를 따라간다. 따라서, Layout의 관점에서 볼때에는.. Root View와 Text의 계층이 있다고 생각 할 수 있다. 여기서 LayoutSystem은 세 가지 단계를 거친다. 1. Root View는 적당한 사이즈를.. 2022. 11. 12.