使用@AppStorage保存字符串数组

Nik*_*ass 2 macos swiftui

在下面的示例中,我使用 @AppStorage 保存字符串:

struct ContentView: View {
    @AppStorage("text") private var text = ""

    var body: some View {
        Button("Append text: \(text)") {
            text.append("APPEND")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但我想保存一个字符串数组,如下所示:

@AppStorage("text") private var text = [
    "APPEND",
    "APPEND"
]
Run Code Online (Sandbox Code Playgroud)

AdR*_*AdR 5

class Storage: NSObject {

static func archiveStringArray(object : [String]) -> Data {
do {
    let data = try NSKeyedArchiver.archivedData(withRootObject: object, requiringSecureCoding: false)
    return data
} catch {
    fatalError("Can't encode data: \(error)")
}
}

static func loadStringArray(data: Data) -> [String] {
do {
    let allowedClasses = [NSArray.self, NSString.self]
    guard let array = try NSKeyedUnarchiver.unarchivedObject(ofClasses: allowedClasses, from:data) as? [String] else {
        return []
    }
    return array
} catch {
    fatalError("loadWStringArray - Can't encode data: \(error)")
}
}
}
Run Code Online (Sandbox Code Playgroud)

看法_

struct ContentView: View {

@State var TempTextArray: [String] = []
@AppStorage("textArray", store: UserDefaults(suiteName: "group.de.domain.MyApp")) var items: Data = Data()

var body: some View {
    VStack(spacing: 30){
        Button("Append text:") {
            TempTextArray.append("Append")
            items = Storage.archiveStringArray(object: TempTextArray)
        }
        
        Button("GET String Array"){
            print(Storage.loadStringArray(data: items))
            
            
        }
    }
    
}}
Run Code Online (Sandbox Code Playgroud)