[IOS - Swift] @AppStorage

서프로·2023년 4월 19일
0
post-thumbnail

@AppStorage 란?


A property wrapper type that reflects a value from UserDefaults and invalidates a view on a change in value in that user default.

애플 공식문서에는 위 처럼 정의 되어있음.
해석해보면 ...
UserDefaults의 값을 반영하고 해당 사용자 기본값의 값 변경에 대한 보기를 무효화하는 속성 래퍼 유형입니다.
라고 한다.

다른 기술 블로그들을 보니 쉽게말해 UserDefault의 SwiftUI 버전이라고 함.
UserDefault 처럼 사용자의 로그인 정보나 설정, 앱 내의 마지막 상태 등을 저장하고 사용할 수 있음.
이제 @AppStorage가 어떤 녀석인지 알겠으니 사용법을 알아보자.

선언

@AppStorage("key") var value = defaultValue

여기서 "key"는 데이터를 저장하고 검색하는 데 사용될 이름이다. defaultValue는 데이터가 저장되어 있지 않은 경우 사용할 기본값을 지정함.

이제 간단한 예제 코드를 살펴보겠음. 이 코드는 간단하게 count를 증가시키는 코드임.

import SwiftUI

struct ContentView: View {
    @AppStorage("count") var count = 0

        var body: some View {
            VStack {
                Text("count: \(count)")
                Button(action: {
                    count += 1
                }) {
                    Text("더하기")
                }
            }
        }
}

예제 코드를 실행해보면 처음엔 count 0이 나타나고 더하기 버튼을 누르면 count가 1씩 증가됨.
앱을 종료하고 다시 실행시키면 count가 0이 아닌 증가된 count가 표시됨.

위 처럼 @AppStroage를 선언하여 사용할 수도 있지만, UserDefault와 같이 사용할 수도 있음.
아래 예제 코드임.

import SwiftUI

struct ContentView: View {
    @AppStorage("count") var count = UserDefaults.standard.integer(forKey: "count")

        var body: some View {
            VStack {
                Text("count: \(count)")
                Button(action: {
                    count += 1
                }) {
                    Text("더하기")
                }
                
                Text("UserDefault: \(UserDefaults.standard.integer(forKey: "count"))")
            }
        }
}

앱을 실행하게 되면 UserDfault integer의 디폴드값인 0이 나타난다.
더하기 버튼을 눌러 count를 증가시키고 앱을 재실행 하게 되면 증가시킨 count값이 나타난다.
요기서 UserDefault를 set하는 방법을 따로 사용하지 않고 저장할 수도 있다는걸 알수있음.

이상으로 @AppStorage에 대해서 알아보았음.

0개의 댓글