macos - 使用@AppStorage保存字符串数组

标签 macos swiftui

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

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

    var body: some View {
        Button("Append text: \(text)") {
            text.append("APPEND")
        }
    }
}

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

@AppStorage("text") private var text = [
    "APPEND",
    "APPEND"
]

最佳答案

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 {
        guard let array = try NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(data) as? [String] else {
            return []
        }
        return array
    } catch {
        fatalError("loadWStringArray - Can't encode data: \(error)")
    }
}}

查看 _

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))
            
            
        }
    }
    
}}

关于macos - 使用@AppStorage保存字符串数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70303055/

相关文章:

windows - 在不使用 StereoMix 的情况下使用 Windows ffmpeg 录制音频输出

macos - iTerm2 或 OSX Lion 终端中的单词跳转

macos - 为什么我不能在我的 Mac OSX 上运行 Docker?

macos - 在 Mac 上卸载 vagrant

swiftui - 不符合协议(protocol) BindableObject - Xcode 11 Beta 4

python - 从 mac 到 iphone 的应用程序

ios - ScrollView 内的 SwiftUI 文本,无法在两个轴上滚动

SwiftUI:如何正确地以模态方式呈现 AVPlayerViewController?

ios - 如何在SwiftUI中汇总过滤后的核心数据?

SwiftUI ScrollView VStack GeometryReader 高度被忽略