如何在带有 swiftUI 列表的切换中使用 json 属性?

Posted

技术标签:

【中文标题】如何在带有 swiftUI 列表的切换中使用 json 属性?【英文标题】:How to use json attribute in a toggle with swiftUI list? 【发布时间】:2020-06-01 08:42:51 【问题描述】:

我为 iPhone/iPad/Mac 开发了一个 SwiftUI 应用程序。该应用程序列出了我的电影(第一次观看)以及每部电影的注释等信息以及是否看过电影。我有一个 JSON 文件,其中包含:

    id : Int,唯一标识符 nom : 字符串,电影标题 idL : 字符串,标题的第一个字符 note : Int,每部电影的注释(0 到 10 之间) isShow : 布尔型,表示是否看过电影

我创建了一个仅显示 isShow=false 的电影的切换,但我无法将此切换与我的 JSON 属性链接...

这是我的项目:https://github.com/thomjlg/Films-APP JSON 文件:https://gist.githubusercontent.com/thomjlg/0782e9e8e27c346af3600bff9923f294/raw/9705fb0c6b40eae59578755b86e331bea257972b/films2.json

【问题讨论】:

【参考方案1】:

我相信当您保存 movies 时,您不会重新加载 userData

Toggle("Film", isOn: self.$movie.isShow)
    .onTapGesture 
        self.userData.fetcher.save(movies: self.userData.movies)
        self.movie.isShow = !self.movie.isShow
        print(self.movie.isShow)
    

fetcher.save(movies:) 只是保存您的电影,但 UserData 仅创建一次,电影仅在 init 中加载:

window.rootViewController = UIHostingController(rootView: contentView
    .environmentObject(UserData())
)
init() 
    fetcher.load  (movies) in
        if let movies = movies 
            self.movies = movies
        
    

【讨论】:

感谢您的回答,您可能是对的,我是 swiftUI 的初学者,我不知道如何解决这个问题... 您可以在 userData 中有一个名为load 的函数,其中包含fetcher.load。您可以在想要重新加载数据时从View 调用它。 好的,谢谢,但我的问题是当我在切换中调用 self.$movie.isShow 时,它不起作用......因为它不知道......你能给我解释一下吗? 其中一种方法是使用@State private var isToggleOn = false 并在切换中使用它。然后使用self.movie.isShow = isToggleOn 这就是我在想的,我在哪里写self.movie.isShow = isToggleOn?就像我写@State private var isToggleOn = false的地方一样?

以上是关于如何在带有 swiftUI 列表的切换中使用 json 属性?的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI - 如何在列表中编辑行?

如何在 TabView SwiftUI 中保存视图的列表状态

如何删除swiftUI列表上的切换下拉列表

SwiftUI:从列表中的项目获取切换状态

在 init() 构造函数中初始化的带有 @State 的 SwiftUI 视图

如何在 SwiftUI 中触发状态更改/重绘切换更改