일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- struct
- scrollview
- 데드락
- deadlock
- SwiftUI
- Algorithm
- decode
- 동기화
- 앨런
- 비동기
- 운영체제
- 상호배제
- 알고리즘
- forEach
- 가상 메모리
- Codable
- async
- IOS
- @state
- Apple Developer Academy
- 인프런
- Swift
- core data
- 오브젝트
- 100 days of SwiftUI
- Linked List
- 동시성
- 프로세스 스케줄링
- COLOR
- UserDefaults
Archives
- Today
- Total
기어가더라도 제대로
[SwiftUI-기초] AppStorage - UserDefault 를 사용 본문
- UserDefault 를 사용할 때 SwiftUI 에서 조금 간편하게 할 수 있는 property wrapper
struct ContentView: View {
@State private var tapCount = UserDefaults.standard.integer(forKey: "Tap")
var body: some View {
Button("Tap count: \(tapCount)") {
tapCount += 1
UserDefaults.standard.set(self.tapCount, forKey: "Tap")
}
}
}
- UserDefault 에는 3가지 문제가 있습니다.
- 첫째, 현행 2줄의 코드로 처리가 되는점
- 저장은 set, 인출은 해당 데이터 타입을 불러옴
- 둘째, 처음에 앱을 실행할 때는 저 "Tap" 에 해당하는 키워드가 없을 텐데, 이때는 Int 타입의 경우 0으로 함
- 그렇다면 Bool 타입의 경우엔 false 인데, 이 false 가 유저가 저장한 false 인지, 아니면 값을 설정한적이 없어서 나오는 false 인지 알 수가 없음
- 셋째, 저장하는데 시간이 소요된다는 점
- 앱을 실행하고, 버튼을 누른 후 즉시 xcode로 돌아와서 다시 앱을 구동하면 처음 구동할 때의 값이 나타남
- 이는 UserDefault 의 경우 사용자가 전에 값으로 되돌리는 경우도 있고 해서, 즉시 값을 업데이트 시키지 않고 몰아서 업데이트하기 때문에 나타남
- 이를 이용하는 것이 시스템 업데이트임.
- 시스템 업데이트는 업데이트가 끝나면 즉시 컴퓨터를 종료시킴.
- 그래서 업데이트된 내용을 저장하는 과정을 처리하도록 함
AppStorage
- UserDefault를 처리하는 property wrapper
- 저장하고 인출하는 과정을 할필요 없이 그냥 일반적인 변수 다루듯이 사용하면 됨
struct ContentView: View {
@AppStorage("tapCount") private var tapCount = 0
var body: some View {
Button("Tap count: \(tapCount)") {
tapCount += 1
}
}
}
- 안에 "tapCount" 라는 키워드는 변수명과 같지 않아도 됨, 무엇이든 상관없음
- UserDefault 와 연동된 @State 라고 생각해도 좋음
- 근본적으로 UserDefault 를 사용하기 때문에, 위의 3가지 문제중 한가지밖에 해결하지 못함
'SwiftUI - 기초' 카테고리의 다른 글
[SwiftUI-기초] image, resizing, Geometry Reader(feat. 중앙정렬) (1) | 2022.11.07 |
---|---|
[SwiftUI-기초] Codable (with UserDefaults) (0) | 2022.11.06 |
[SwiftUI-기초] onDelete() - List의 row 삭제하기(Array item delete) (0) | 2022.11.04 |
[SwiftUI-기초] Custom Color, dark mode (0) | 2022.11.04 |
[SwiftUI-기초] .Sheet: modal 로 페이지 넘기기(dismiss) (0) | 2022.11.03 |
Comments