Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 导航到视图时刷新视图_Swift_Swiftui - Fatal编程技术网

Swift 导航到视图时刷新视图

Swift 导航到视图时刷新视图,swift,swiftui,Swift,Swiftui,在SwiftUI 2中,当我从父视图导航到子视图,然后再返回父视图时,父视图不会刷新其内容。如何强制它刷新其内容 为了测试内容是否被刷新,在我的父视图中,我使用以下代码显示了一个随机数: Text("Random number is \(Int.random(in: 1..<100))") Text(“Random number is\(Int.Random)(in:1..SwiftUI是声明性的-正如您定义视图可能处于的状态一样,Swift UI将负责更新视图的时间

在SwiftUI 2中,当我从父视图导航到子视图,然后再返回父视图时,父视图不会刷新其内容。如何强制它刷新其内容

为了测试内容是否被刷新,在我的父视图中,我使用以下代码显示了一个随机数:

Text("Random number is \(Int.random(in: 1..<100))")

Text(“Random number is\(Int.Random)(in:1..SwiftUI是声明性的-正如您定义视图可能处于的状态一样,Swift UI将负责更新视图的时间。在您的示例中,状态没有变化,因此视图不会更新

如果要刷新视图,则需要更新“出现”事件的状态。可以这样做:

struct ContentView: View {
    @State var intValue: Int = 0

    var body: some View {
        Text("Random number is \(self.intValue)")
        .onAppear {
            intValue = Int.random(in: 1..<100)
        }
    }
}
struct ContentView:View{
@状态变量intValue:Int=0
var body:一些观点{
文本(“随机数为\(self.intValue)”)
奥纳佩尔先生{

intValue=Int.random(in:1..您可以通过向源视图添加带有@State变量的.id(viewID)视图修饰符(在本例中称为“viewID”)来强制SwiftUI更新列表。然后在目标视图的.onDisappear()中更新此viewID:

struct ContentView: View {
    @State private var viewID: Int = 0
    
    var body: some View {
        NavigationView {
            VStack {
                
                Text("Hello, random world number \(Int.random(in: 1...100))")
                    .padding()
                    .id(viewID)
                                
                NavigationLink(
                    destination: destinationView,
                    label: { labelView })
            }
        }
    }
    
    private var labelView: some View {
        Text("Go to Destination View")
    }
    
    private var destinationView: some View {
        return Text("I am the Destination.")
            .onDisappear{
                viewID += 1
            }
    }
}

你的建议显然会起作用,因为状态更改会触发刷新。但是,有没有什么方法可以在不更改状态的情况下触发刷新?(我实际上并没有在我的应用程序中使用随机数,我只是用它来证明我的视图不会刷新)。在内部,每次状态更改时,Swift都必须调用某些刷新函数;您知道是否可以直接调用此函数吗?@Gary您应该将刷新留给SwiftUI。当没有任何更改时,您不需要强制刷新视图,如果某些内容确实更改,则
@state
将负责刷新埃弗林。