小编Vic*_*ann的帖子

当 Userdefaults 中的对象更改时更新 SwiftUI 视图

我正在 XCode 中开发一个应用程序,该应用程序显示从 URL 保存在 JSON 文件中的位置。我已将用户最喜欢的位置保存在 UserDefaults.standard.object(forKey: "heart") 中

SpotDetailView 上的心形按钮可保存该地点,并显示该地点是否为收藏夹。

import SwiftUI

struct SpotDetailView: View {
    @State var spot: WindApp //knows which spot it's at
    var spotname:String
    @State var favourites: [String:String] = UserDefaults.standard.object(forKey: "heart") as? [String:String] ?? [:]
    
    
    var body: some View {
        
        ZStack {
            
            List {
                SpotMapView(coordinate: spot.locationCoordinate)
                    .cornerRadius(8)
                ForEach(0..<9) { i in
                    SingleDayView(spot: spot, counter: (i * 8))
                    }
            }
            .navigationTitle("\(spot.spot)")
            VStack {
                Spacer()
                HStack {
                    Spacer()
                    Button(action: {
                        if favourites[spot.spot] == "heart" {
                            favourites[spot.spot] = …
Run Code Online (Sandbox Code Playgroud)

swift userdefaults swiftui

5
推荐指数
1
解决办法
2108
查看次数

如何将 @AppStorage 用于字符串字典 [String: String]

嘿,在我的应用程序中,我试图存储用户是否希望某个位置成为其最喜欢的位置。为了在此 UserDefaults 中进行更改更新视图,我需要使用 @AppStorage。但是,目前我只收到错误“调用初始化程序时没有完全匹配”我是否需要使用数据而不是 [String: String],如果是的话如何?有谁知道如何解决这一问题?提前致谢

import SwiftUI

struct SpotDetailView: View {
    @State var spot: WindApp //knows which spot it's at
    var spotname:String
    //@State var favourites: [String:String] = UserDefaults.standard.object(forKey: "heart") as? [String:String] ?? [:]
    @AppStorage("heart") var favourites: [String: String] = [:]

        
    var body: some View {
        
        ZStack {
            
            List {
                SpotMapView(coordinate: spot.locationCoordinate)
                    .cornerRadius(8)
                ForEach(0..<9) { i in
                    SingleDayView(spot: spot, counter: (i * 8))
                    }
            }
            .navigationTitle("\(spot.spot)")
            VStack {
                Spacer()
                HStack {
                    Spacer()
                    Button(action: {
                        if favourites[spot.spot] == "heart" {
                            favourites[spot.spot] …
Run Code Online (Sandbox Code Playgroud)

xcode swift swiftui appstorage

2
推荐指数
1
解决办法
2548
查看次数

标签 统计

swift ×2

swiftui ×2

appstorage ×1

userdefaults ×1

xcode ×1