[SwiftUI] AppStorage & SceneStorage

RudinP·2025년 8월 23일
0

Study

목록 보기
348/363

Double, Int와 같이 기본적인 타입의 값들은 SwiftUI에서 Defaults System을 통해 간단히 저장 가능하다.

작은 크기의 데이터 저장에만 사용하자.

@ AppStorage

@AppStorage("number") private var number = 0
  • @State와 같이 값이 바뀔 때 자동으로 UI도 업데이트됨
  • Application 레벨에서 공유되기 때문에 스플릿 뷰로 동일 앱을 두 화면에 띄우더라도 싱크됨
  • 홈으로 이동할 때 확실하게 저장됨
  • 저장되기는 하는데 그 이외에는 저장 시점 보장 X
  • UserDefault에 저장됨

@ SceneStorage

@SceneStorage("number") private var number = 0
  • Scene 레벨에서 공유되기 때문에 스플릿 뷰로 동일 앱을 두 화면에 띄우면 다른 값을 가지게 됨
  • 다만 값이 언제 저장되는지 보장 X
  • 보통 이전상태 복구하는데 사용(ex: 사용자 마지막 로그인 계정을 로그인 화면에서 바로 입력해주기 등)

RawRepresentable

  • UserDefaults에 없는 형식을 사용할 때 사용하는 프로토콜
  • rawValue를 받는 생성자 추가하고 스토리지에 저장하는 인스턴스로 초기화
  • rawValue라는 속성 초기화 후 스토리지에 저장할 타입으로 데이터 리턴
  • 사용하는 부분에서는 동일하게 @AppStorage("이름")등으로 사용하면 됨
extension Color: RawRepresentable {
    public init?(rawValue: String) {
        guard let data = Data(base64Encoded: rawValue) else{
            self = .black
            return
        }
    
    public var rawValue: String {
        do {
            let data = try NSKeyedArchiver.archivedData(withRootObject: UIColor(self), requiringSecureCoding: false) as Data
            return data.base64EncodedString()
            
        } catch {
            return ""
        }
    }
}
profile
iOS 개발자가 되기 위한 스터디룸...

0개의 댓글