본문 바로가기
Project/SwiftUI 블록와이드

[SwiftUI] @AppStorage로 배열(Array) 다루기

by iOS_woo 2023. 2. 5.

String Array로 구성된 키워드 뉴스

이번에는 블록와이드의 키워드 뉴스를 사용자가 손쉽게 원하는 키워드로 편집할 수 있는 기능을 추가합니다.


현재 블록와이드의 키워드 뉴스는  var categories: [String] 문자 배열에 따라서 forEach로 크롤링을 하고 탭들이 생성되도록 설계되어 있습니다.
그러므로 기능 개발의 목표는 사용자가 문자 배열을 편집하고 기기에 저장하는 것입니다. 

 

관심목록을 저장할 때보다는 조금 더 간편한 @AppStorage를 사용하려고 합니다. 

다만, @AppStorage는 Array를 지원하지 않기 때문에 다음과 같은 에러 메세지가 발생하게 됩니다. 

따라서 @AppStorage에서 배열을 사용할 때는 다음의 익스텐션을 추가해주어야 합니다. 

extension Array: RawRepresentable where Element: Codable {
    public init?(rawValue: String) {
        guard let data = rawValue.data(using: .utf8),
              let result = try? JSONDecoder().decode([Element].self, from: data)
        else {
            return nil
        }
        self = result
    }

    public var rawValue: String {
        guard let data = try? JSONEncoder().encode(self),
              let result = String(data: data, encoding: .utf8)
        else {
            return "[]"
        }
        return result
    }
}

추가한 이후에는 정상적으로 빌드되는 것을 확인할 수 있습니다. :)
 

앞으로는 배열에 추가, 삭제, 순서 편집 등의 기능을 추가하는 작업을 할 수 있겠습니다!

참고 문서:

 

SwiftUI: What is @AppStorage property wrapper

I used to save important App data like login credentials into UserDefaults using the following statement: UserDefaults.standard.set("sample@email.com", forKey: "emailAddress") ...

stackoverflow.com

 

 

@AppStorage와 UserDefaults

안녕하세요. iOS 개발자 에이든입니다!👦🏻 App에 간단하게 값들을 저장하고 싶을 때 사용하는 방법!!🤔 바로바로 UserDefaults!!! 이번 시간에는 UserDefaults와 iOS 14부터 새로 생긴 SwitUI의 AppStorage에

aiden-ios.tistory.com

 

댓글