ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • @AppStorage와 UserDefaults
    스유를 써봐유! 2021. 10. 17. 23:20
    728x90
    반응형

     

     

     

     

     

    안녕하세요. iOS 개발자 에이든입니다!👦🏻

     

     

     

    App에 간단하게 값들을 저장하고 싶을 때

    사용하는 방법!!🤔

    바로바로 UserDefaults!!! 

     

     

     

    이번 시간에는 UserDefaultsiOS 14부터 새로 생긴 

    SwitUI의 AppStorage에 대해서 알아보겠습니다!

     

    자 그럼 함께 뽀개봅시당!

     


     

     

     


    UserDefaults

    Apple에서는 "App을 실행하는 동안 지속적으로 key-value로 저장하는 사용자의 기본 Database에 대한 Interface"라고 설명을 했어요! 쉽게 말해 별도의 DB 없이 App에 내가 원하는 값을 어떤 Key와 함께 저장하고, 언제든 그 Key를 통해 값을 불러낼 수 있는 것이죠. 

    단, String, Bool, Int, Array 등 단일 Data를 저장하는 데에 적합하기 때문에 대량의 Data를 저장하고 싶다면 따로 Database를 만드는 것을 추천합니다!

     

    • 저장하는 방법
    예시로 제 이름, 발 사이즈 및 사람인지 아닌지에 대한 값을 저장해볼게요ㅎㅎㅎ😆
    UserDefaults.standard.set("Aiden", forKey: "name")
    UserDefaults.standard.set(275, forKey: "footSize")
    UserDefaults.standard.set(true, forKey: "isHuman")

     

    • 불러오는 방법
    저장하는 법과는 다르게 불러올 때는 Type에 따라 불러오는 법이 다릅니다! 
    값이 없는 경우에는 Array빈 배열을 반환하고, Int, Float, Double0을 반환합니다.
    다만 String의 경우는 nil을 반환하기 때문에 꼭 Optional Binding을 해주어야 합니다!
    let name = UserDefaults.standard.string(forKey: "name") ?? ""
    let footSize = UserDefaults.standard.integer(forKey: "footSize")
    let isHuman = UserDefaults.standard.bool(forKey: "isHuman")​

     

    • 삭제하는 방법
    UserDefaults.standard.removeObject(forKey: "footSize")

     

     

     

     

     

    이런 UserDefaults를 SwiftUI에서는 AppStorage라는 것으로 좀 더 쉽게 사용할 수 있습니다.

    한번 살펴보시죵~!


    AppStorage

    앞서 살펴본 @State와 같은 Property Wrapper로 UserDefaults의 값을 반영하고 변경하는 역할을 합니다.

     

    바로 예시를 한번 보도록 합시다!

    import SwiftUI
    
    struct ContentView: View {
        @AppStorage("isOn") var isOn: Bool = UserDefaults.standard.bool(forKey: "isOn")
        @AppStorage("text") var text: String = UserDefaults.standard.string(forKey: "text") ?? ""
        
        
        var body: some View {
            VStack {
                Toggle("Switch", isOn: $isOn)
                    .padding(EdgeInsets(top: 10, leading: 10, bottom: 10, trailing: 10))
                    .border(Color.black, width: 1)
                    .frame(width: UIScreen.main.bounds.width - 60)
                TextField("Text", text: $text)
                    .padding(EdgeInsets(top: 10, leading: 10, bottom: 10, trailing: 10))
                    .border(Color.black, width: 1)
                    .frame(width: UIScreen.main.bounds.width - 60)               
            }
        }
    }

     

     

     

     

     

    짠!!!! 어떤가요?

    이렇게 별도의 Set 없이 그저 값을 바꾸는 것만으로 반영이 됩니다!

    간단하죠?ㅎㅎ

     


     

    오늘은 UserDefaults와 AppStorage에 대해서 알아보았습니다.

    간단한 설정 같은 것들을 저장할 때 상당히 유용하게 사용할 수 있는 녀석들이에요

    잘 써먹으면 상당히 유용하겠죠?ㅎㅎㅎㅎ

    그럼 오늘은 여기까지~!!

     

    혹시라도 부족하거나 잘못된 부분 그리고 질문 있으시면 언제든 댓글 부탁드려요! 감사합니다!👦🏻👋🏻

     

    728x90
    반응형

    '스유를 써봐유!' 카테고리의 다른 글

    NavigationView, NavigationLink  (0) 2021.09.26
    Text Attributed  (1) 2021.09.13
    @State, @Binding, @ObservedObject, @EnvironmentObject  (0) 2021.09.05
    Custom TabBar  (0) 2021.08.15
    Prologue  (1) 2021.08.01

    댓글

Designed by Tistory.