SwiftUI
-
[SwiftUI] Identity, lifetime, dependenciesSwiftUI 2024. 3. 29. 15:52
WWDC21 Demystify SwiftUI 를 보고 개인적인 생각을 정리한 내용입니다. SwiftUI는 선언적 UI, 즉, 뷰가 어떻게 바껴야 하는지 미리 정의해두는 것이다. 따라서 SwiftUI가 우리의 앱을 어떻게 바라보는지에 대한 이해가 필요하다. SwiftUI가 앱을 다룰지에 대한 핵심은 3가지. Identity, lifetime, dependencies를 이해해야 한다. # Identity 제일 먼저 뷰를 어떻게 구분할 것인가에 대한 개념이 필요하고, 이를 Identity라고 부른다. Identity가 동일하면 같은 뷰로 바라보는 것이다. ## Identity Type 모든 뷰는 Identity를 갖는다. 종류로는 명시적, 구조적(explict, structural) Identity가 있다. ..
-
[SwiftUI] HStack 하위 요소 > 최대 높이로 동일하게 맞추기SwiftUI 2023. 5. 22. 21:12
HStack 안에 View 들 중에서 최대 높이의 뷰에 맞추고 싶었으나, 아래와 같이 나오는 문제를 만났다. AS-IS 에서 TO-BE 로 바꾸고 싶다. AS-IS TO-BE AS-IS 코드는 아래와 같다. 원인은 왼쪽은 가운데 Spacer() 가 들어간 VStack 에서 Spacer 로 인해 상위 뷰의 최대 높이만큼 늘어나버리기 때문! VStack { HStack(alignment: .bottom) { VStack(spacing: 0) { Text("웅쓰") Spacer() Text("woongs") } .border(.blue, width: 1) Spacer() Rectangle() .foregroundColor(.orange) .frame(width: 100, height: 150) } } .fra..
-
task(priority:_:)SwiftUI 2023. 1. 28. 14:29
Adds an asynchronous task to perform before this view appears. 뷰가 나타나기 전에 비동기 작업을 추가한다. iOS 15 부터 지원하는 instance method 이다. 기존에는 비동기 작업을 하려면 아래와 같이 Task 를 사용해야했는데, ... var body: some View { aView { } .onAppear { Task { await load() } } } 아래와 같이 더 간편하게 사용할 수 있다. ... var body: some View { aView { } .task { await load() } }
-
StateObjectSwiftUI 2023. 1. 28. 14:01
ObservableObject를 인스턴스화 하는 프로퍼티 래퍼 SwiftUI 는 각 객체가 생성될 때 한 번만 새로운 객체를 생성하고, ObservableObject 의 @Published 프로퍼티가 바뀔 때 관련 뷰를 업데이트 합니다. 아래와 같이 사용할 수 있습니다. class Book: ObservableObject { @Published var title = "Great Expectations" } struct BookView: View { @StateObject var book: Book var body: some View { Text(book.title) } } state object를 ObservedObject attribute 를 갖는 프로퍼티로 넘길 수도 있지만, environmentOb..
-
ObservedObjectSwiftUI 2023. 1. 28. 13:31
A property wrapper type that subscribes to an observable object and invalidates a view whenever the observable object changes. ObservableObject 를 구독하고 ObservableObject 값이 바뀔 때마다 뷰를 무효화하고 새로 그리는 (invalidates a view) 객체 아래와 같이 사용할 수 있다. ObservableObject 객체를 @ObservedObject 프로퍼티 래퍼로 선언해두면, ObservableObject 의 @Published 값이 바뀔 때마다 뷰를 업데이트 한다. (새로 그린다.) class Book: ObservableObject { @Published var ti..
-
ObservableObjectSwiftUI 2023. 1. 28. 12:44
객체가 변경되기 전에 방출하는 퍼블리셔를 갖는 객체 타입 ObservableObject 는 objectWillChange 퍼블리셔와 동기화되어 있습니다. 이 objectWillChange 퍼블리셔는 @Published 프로퍼티가 변경되기 전에 값을 방출합니다. class Contact: ObservableObject { @Published var name: String @Published var age: Int init(name: String, age: Int) { self.name = name self.age = age } func haveBirthday() -> Int { age += 1 return age } } let john = Contact(name: "John Appleseed", age: ..
-
[SwiftUI] Model data 앱 데이터 관리하기SwiftUI 2022. 11. 25. 18:47
아래 문서를 읽고 정리한 글입니다. https://developer.apple.com/documentation/swiftui/model-data Apple Developer Documentation developer.apple.com Overview SwiftUI는 선언적인 UI 접근 방식을 제공합니다. 뷰 계층을 구성할 때 뷰에게 관련된 데이터 의존성을 알려줍니다. 그럼 외부 이벤트나, 사용자 액션으로 데이터가 바뀔 때, SwiftUI 는 자동으로 영향이 미치는 부분을 업데이트 합니다. 결과적으로 SwiftUI 프레임워크는 자동으로 이전에 뷰컨트롤러가 했던 대부분의 일을 수행합니다. SwiftUI 프레임워크는 데이터와 UI를 연결하기 위해 state variables, bindings 같은 도구를 제공..