일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- typeorm
- @State
- NullObject
- @Environment
- dismiss
- nonisolated
- vim
- Xcode
- nestjs
- swift6
- IOS
- Operater
- Operators
- @EnvironmentObject
- RFC1738/1808
- Bug
- URL(string:)
- operator
- SWIFT
- subject
- init?
- Creating Operators
- SwiftUI
- NavigationLink
- RxCocoa
- ios14
- init
- @Binding
- graphql
- RxSwift
- Today
- Total
목록Development/SwiftUI (14)
Tunko Development Diary
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/SJ3Ch/btrNANZTdlo/ZAcNbQjwAYjl8IM9n4cgX1/img.gif)
일반적으로 화면을 닫을때 if #available(iOS 15.0, *) { @Environment(\\.dismiss) private var dismiss } else { @Environment(\\.presentationMode) var presentationMode } 을 사용하여 화면을 닫습니다. iOS 15 이후 부터는 @Environment(\\.dismiss) private var dismiss 가 사용됩니다. 하지만 문제가 있습니다. 뷰를 열고 닫을 때마다 이러한 @Environment 변수를 사용하는 모든 뷰의 Body 내부 코드를 재실행합니다. 따라서 앱 성능과 메모리 및 전력소비에 부정적인 영향을 미칠 수 있습니다. 앱이 오랫동안 이 작업을 수행하고 실행하는동안 리소스 사용량이 급증하..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/b9JgOe/btrNjqDMSay/5Lk6dS28mHNtaNr85l3IBk/img.png)
Apple Developer Documentation @Environment 와 @EnvironmentObject 차이점 SwiftUI 는 @Environment와 @EnvironmentObject 속성래퍼를 모두 제공합니다. @EnvironmentObject는 환경에 임의 값을 주입할 수 있는 반면 @Environment는 특히 Swift와 함께 작업하기 위해서 존재합니다. Swift에서 사용하기 위해 미리 지정된 Key @Environment 를 통해서 알 수 있는 정보는 디바이스가 다크모드인지 라이트모드인지 뷰가 렌더링되는 크기 클래스 등 시스템에서 제공하는 고정되어있는 속성에 접근이 가능합니다. @Environment 핵심 데이터 관리 개체 컨텍스트와 같은 내용을 읽어내는 데 적합합니다. 반면에 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/DGpvg/btrNdrbCIf8/CMEQBi4wIzZuzv6ygUA5i0/img.png)
최대한 짧고 간결하게 요약하면 @State로 선언된 변수에 연결하기 위한 프로퍼티 래퍼가 @Binding 입니다. 하지만 밑도 끝도 없이 이렇게만 이야기하면 이해하기 쉽지 않습니다. SwiftUI 에서의 데이터 흐름을 알게 되시면 쉽게 이해할 수 있습니다. 핵심 키워드는 단일원천자료 (Single Source of Truth) 입니다. swiftUI를 이해하는데 있어 가장 중요한 키워드 같습니다. 동일한 데이터 요소가 여러곳에 나뉘어 중복되지 않고 한곳에서 다루어 지는 것입니다. SwiftUI에서는 각 뷰에 데이터가 들어가게 됩니다. 예를 들어보겠습니다. age라는 변수를 선언하고 나이를 저장합니다. 앱을 구성하면서 여러 뷰를 사용하게 되고 각각 age 정보가 필요한 A, B, C뷰를 생성합니다. ABC..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cc0gTz/btrM6XClje7/gikg8NqU1UXQwAdpWahGpk/img.png)
SwiftUI의 View는 구조체로 구현되어있습니다. value Type인 View 내부에선 var로 선언되더라도 프로퍼티 값을 바꿀 수 없습니다. 구조체는 값 유형이기 때문에 일반적으로 허용되지 않습니다. 에러 메시지 Left side of mutating operator isn't mutable: 'self' is immutable 하지만, SwiftUI에서는 @State 속성래퍼를 사용하여 구조체 내부의 값을 수정할 수 있도록 합니다. @State var age : Int = 0 이렇게만 선언하면 age 값을 SwiftUI가 관리하는 공유 스토리지로 이동됩니다. 공유 스토리지로 이동된 age 값은 SwiftUI가 저장하고 가지고있게 됩니다. SwiftUI에서는 데이터를 기반으로 뷰를 매번 다시 그리..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cegMYw/btrM6XvAyBi/MkIsLGGauzY2NUf9z9KYl1/img.png)
@AppStorage 앱내에 데이터를 쓰고 읽기가 가능합니다. UserDefaults 와 같은 기능을 합니다. @Binding 다른 View가 소유한 값 유형 데이터를 나타냅니다. 바인딩을 로컬로 변경하면 원격 데이터도 변경됩니다. 이것은 데이터를 소유하지 않습니다. @Environment 색 구성표, 접근성 옵션 및 특성 컬렉션과 같은 시스템의 데이터를 읽을 수 있지만 원하는 경우 여기에 고유한 키를 추가할 수 있습니다. 이것은 데이터를 소유하지 않습니다. @EnvironmentObject 환경에 배치한 공유 객체를 읽습니다. 이것은 데이터를 소유하지 않습니다. @FetchRequest 특정 엔티티에 대한 핵심 데이터 가져오기 요청을 시작합니다. 이것은 데이터를 소유합니다. @FocusedBinding..