首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >内存缓存视图

内存缓存视图
EN

Stack Overflow用户
提问于 2021-10-24 15:34:24
回答 1查看 194关注 0票数 0

我对SwiftUI相当陌生,我试图构建一个带有多个WKWebView的应用程序,只要按一下按钮就可以循环完成。我一直未能在WebViewRepresentables (WKWebKit包装器)之间切换。由于包装UIKit和处理所有的委托是一件复杂的事情,我认为有更多的空间,错误,并决定创建另一个项目,只有颜色被循环通过。

我正在试着在下面的代码片段中查看ColorView

我期待着在3秒后看到这一幕。消息3秒,在之后,我找到了他们(onAppear{})。但是,一旦它为第一个视图运行,它也会运行所有其他视图。当我按下按钮的时候,另外两个人也有了文本。

为什么onAppear代码块只运行一次(断点只命中一次),结果适用于每个视图,尽管它们都是ColorView的不同实例。

我期望每个视图只生成一次随机数,但在下面的代码片段中,我观察到每次切换到下一个视图时都会生成一个新的随机数。我认为将它们存储在内存数组中会防止这种情况发生,因为它们只会被安装一次?

内存缓存视图的正确方式是什么,以便在它们之间切换(每个视图只初始化一次,而不每次显示刷新)?

代码语言:javascript
复制
struct ColorView: View {
    @State private var text = ""
    let color: Color
    
    var body: some View {
        VStack {
            Text(text)
            Text("\(Int.random(in: 1..<10))")
            color
        }
        .onAppear {
            DispatchQueue.main.asyncAfter(deadline: .now() + 3) {
                self.text = "This is after 3 seconds."
            }
        }
    }
}

struct ContentView: View {
    @State private var colors: [ColorView] = [ColorView(color: .red), ColorView(color: .yellow), ColorView(color: .gray)]
    @State private var index = 0
    
    var body: some View {
        VStack {
            Text("page \(index)")
            Button(action: { index += 1; index = index % 3 }, label: { Text("Go through") })
            colors[index]
        }
    }
}
EN

回答 1

Stack Overflow用户

发布于 2021-10-24 17:54:03

请考虑Asperi的注释,但是如果您想强制执行该任务,请按照下面的命令理解SwiftUI是如何工作的:这个附加程序是因为视图是第一次加载的,并且只有当内部的某些内容发生变化时,它才会运行。

如果添加.id(),则如果id正在更改,则视图将刷新。

结构ContentView:视图{@国营私有变量颜色: ColorView =ColorView(颜色:.red),ColorView(颜色:.yellow),ColorView(颜色:.gray) @国营私有变量索引=0

代码语言:javascript
复制
var body: some View {
    VStack {
        Text("page \(index)")
        Button(action: { index += 1; index = index % 3 }, label: { Text("Go through") })
        Divider()
        colors[index]
            .id(index) //--> add this
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69698254

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档