[1] task modifier - task(priority:_:) // Adds an asynchronous task to perform before this view appears. - task(id:priority:_:) // Adds a task to perform before this view appears or when a specified value changes. [2] 필요성 task modifier 가 나오기 전에는 뷰가 disappear 될 때 진행 중인 task 를 cancel 해주기 위해 어딘가에 (아래 예제는 뷰인데 보통 뷰모델) task 를 들고 있고 onDisappear 에서 cancel을 해줘야했음. struct SampleView: View { var body: some ..
Processing URL Session Data Task Results with Combine 에 나오는 내용입니다. [ 목표 ] Combine으로 네트워크 쪽 코드를 작성하는 것은 크게 두가지 절차를 거칩니다. 1. Data Task Publisher 를 만든다. 2. 비동기 연산자 (asynchronous operator) 들을 체이닝하여 data를 받고 처리한다. 이를 알아봅니다. 또한 네트워크 쪽 코드작성할 때 필요한 에러 핸들링, 스케쥴링, share 도 알아봅니다! [1] Data Task Publisher 만들기 URLSession 은 Combine Publisher 인 URLSession.DataTaskPublisher 를 제공합니다. func dataTaskPublisher(for: U..
SwiftUI Tutorials > Animating Views and Transitions 에 나오는 내용을 기반으로 하고 있습니다. 목표 SwiftUI가 제공하는 effect 들을 써보고 (이 글에서는 rotationEffect, scaleEffect 사용) 여러 effect를 조합하여 애니메이션 시키는 법을 알아봅니다. [1] rotationEffect struct DetailButtonImage: View { var body: some View { Image(systemName: "chevron.right") .frame(width: 50, height: 50) .background( Circle().foregroundColor(.white) // Shape의 fill을 써도 됨. ) .shado..
[SwiftUI] re-rendering, re-draw 추측 에서 SwiftUI가 내부적으로 리렌더링을 어떻게 결정하는 지 추측해보았는데요 리렌더링을 커스터마이징 (?) 할 수 있는 방법도 있습니다. # 1. SwiftUI 는 다시 안그리는데, 나는 다시 그리고 싶은 경우 뷰는 extract subview를 하면 별도의 identity를 부여받아, 부모 뷰와 같이 리렌더링이 안됩니다. 부모의 body가 재호출될 때 extracted 한 서브뷰를 항상 같이 다시 그리고 싶으면 id를 활용합니다. [ 기본 동작 ] ContentView의 body가 호출될 때 NoMatterText는 다시 안그려짐 struct ContentView: View { @State private var isOn = true pri..
[ 인트로 ] SwiftUI는 state-driven, data-driven 방식으로 state 가 변하면 view 를 다시 그립니다 (body를 호출하여) 하지만 body를 재호출한다고 모든 것을 다시 그리는 것이 아니라 변경이 필요한 부분만 다시 렌더링 합니다. 그렇다면.. re-rendering 또는 re-draw를 결정하는 SwiftUI의 diff 판단 로직은 어떻게 될까요? (= body가 호출될 때 무엇을 다시 그리고, 무엇을 다시 안그릴 지 어떻게 결정할까요?) WWDC21 - Demystify SwiftUI 를 보면 identity, life time, dependencies 이 세가지 요인이 메인요소인 것 같습니다. 저는 이 중에서 identity 위주로 저의 re-rendering 추측..
WWDC 2021 > SwiftUI Accessibility: Beyond the basics 를 보던 중, iOS15에 새로 나온 accessibilityRepresentation(representation:) 을 찾아보면서 좋은 예제를 발견해서 정리합니다. 출처는 The power of accessibilityRepresentation view modifier in SwiftUI 글 입니다. [1] accessibilityRepresentation(representation:) 길게 눌렀을 때만 체크상태를 토글하는 LongPressCheckmark라는 커스텀 뷰를 만들었다고 해봅시다. import SwiftUI struct LongPressCheckmark: View { @Binding var isS..
[ 이슈 ] Deployment Target이 iOS 13인 앱에서 value change를 감지하기 위해 onChange(of:perform:) 를 사용하려고 했으나 onChange는 iOS 14부터 지원되는 것이였습니다,,, 애플의 Picker 를 예제로 대응책을 살펴보겠습니다! 방법 1 ) onReceive(_:perform:) 는 iOS 13부터 가능하므로 이것을 써준다. onReceive에 Publisher 타입을 넘겨줘야하므로 Just 로 감싸줘야하는데, 이를 위해 import Combine 해줘야합니다. import SwiftUI import Combine enum Flavor: String, CaseIterable, Identifiable { case chocolate case vanill..
Managing Model Data in Your App 문서를 보면 App의 모델 데이터와 뷰 간의 connection을 만들어 주는 세가지 property wrapper type 을 소개해줍니다. - ObservedObject iOS 13+ - EnvironmentObject iOS 13+ - StateObject iOS 14+ ObservedObject 랑 EnvironmentObject는 작년에 살펴봐서 안살펴본 StateObject 만 정리해보겠습니다. StateObject 의 정의 A property wrapper type that instantiates an observable object. StateObject 왜 필요한가? (Managing Model Data in Your App 문서 ..
enum Type { case A case B } struct AView: View { var body: some View { EmptyView() } } struct BView: View { var body: some View { EmptyView() } } # single return type 이렇게 각 타입에 맞게 다른 뷰를 리턴해주면 컴파일 에러가 난다. Swift는 function에 대해 single return type을 요구하기 때문이다. # AnyView , Group 그래서 AnyView로 감싸서 쓴다. 참고로 AnyView는 return을 생략하고 쓸 수는 없다. 또는 Group을 이용하는 방법도 있다. # @ViewBuilder WWDC 2021 - Demystify SwiftUI 에..
ZStack 은 자신의 children를 z축으로 overlay하는 View이고 overlay 는 현재 뷰에 secondary view를 overlay하는 modifier 입니다. (overlay를 중첩으로 번역할 수 있을 것 같습니다) 애플문서에 있는 overlay 예제의 결과를 zstack으로도 똑같이 나타낼 수 있습니다. 이렇게 보면 똑같아보이지만 사실 두 개는 차이점이 있습니다. ZStack의 자식뷰들은 서로에 대해 independent 합니다. 그리고 ZStack에 frame을 따로 주지 않은 이상 가장 큰 자식뷰를 기준으로 ZStack의 fit이 결정됩니다. 반면 overlay의 경우 overlay되는 view는 parent view에 종속됩니다. 항상 overlaid view는 parent ..
- Total
- Today
- Yesterday
- Sketch 누끼
- METAL
- 장고 Custom Management Command
- DRF APIException
- Flutter Text Gradient
- Python Type Hint
- github actions
- Flutter Spacer
- Dart Factory
- SerializerMethodField
- flutter deep link
- flutter 앱 출시
- Django Heroku Scheduler
- Flutter Clipboard
- drf custom error
- 장고 URL querystring
- 플러터 싱글톤
- cocoapod
- flutter build mode
- 플러터 얼럿
- PencilKit
- Flutter 로딩
- flutter dynamic link
- Flutter getter setter
- Django FCM
- ipad multitasking
- ribs
- Watch App for iOS App vs Watch App
- Django Firebase Cloud Messaging
- 구글 Geocoding API
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |