Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.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
Ios @已发布的变量未更新子视图_Ios_Swift_Swiftui - Fatal编程技术网

Ios @已发布的变量未更新子视图

Ios @已发布的变量未更新子视图,ios,swift,swiftui,Ios,Swift,Swiftui,我的问题是@Published变量没有更新我的swiftui子视图。它会从false变为true,但是视图本身不会更新。下面我粘贴了我的问题的一个非常简化的版本。另外,我将在FirstView中创建的api变量传递给子视图,但是视图仍然没有更改。如果这是不够的信息,你可以看看完整的项目,我可以分享它下面 import Foundation import SwiftUI struct FirstView: View { @ObservedObject var Api = API

我的问题是@Published变量没有更新我的swiftui子视图。它会从false变为true,但是视图本身不会更新。下面我粘贴了我的问题的一个非常简化的版本。另外,我将在
FirstView
中创建的api变量传递给
子视图
,但是视图仍然没有更改。如果这是不够的信息,你可以看看完整的项目,我可以分享它下面

import Foundation
import SwiftUI

struct FirstView: View {
    
    @ObservedObject var Api = API()
    var body: some View {
        
        VStack{
            SubView()
            
            Button(action:{
                Api.apicall()
            }){
                Text("search")
            }
        }
    }
    
}


struct SubView:View{
    @ObservedObject var daApi = API()
    var array = [1,2,3]
    var body: some View{
        ForEach(0..<array.count){ number in
            Text("\(number)")
        }
        if daApi.viewPresent == true{
            Text("Swag")
        }
        
        
    }
}


class API:ObservableObject{
    @Published var viewPresent:Bool = false
    
    func apicall(){
        viewPresent = true
        //The Long ApiCall
        viewPresent = false
    }
}
<代码>导入基础 导入快捷键 结构FirstView:视图{ @ObservedObject变量Api=Api() var body:一些观点{ VStack{ 子视图() 按钮(操作:{ Api.apicall() }){ 文本(“搜索”) } } } } 结构子视图:视图{ @ObservedObject var daApi=API() 变量数组=[1,2,3] var body:一些观点{
ForEach(0..现在,您有两个不同的
API
实例。您需要在两个
视图之间共享同一实例:

struct FirstView: View {
    
    @ObservedObject var Api = API()
    var body: some View {
        
        VStack{
            SubView(daApi: Api)
            
            Button(action:{
                Api.apicall()
            }){
                Text("search")
            }
        }
    }
    
}


struct SubView:View{
    @ObservedObject var daApi : API
    var array = [1,2,3]
    var body: some View{
        ForEach(0..<array.count){ number in
            Text("\(number)")
        }
        if daApi.viewPresent == true {
            Text("Swag")
        }
    }
}


class API:ObservableObject{
    @Published var viewPresent:Bool = false
    
    func apicall(){
        viewPresent = true
    }
}

struct FirstView:View{
@ObservedObject变量Api=Api()
var body:一些观点{
VStack{
子视图(daApi:Api)
按钮(操作:{
Api.apicall()
}){
文本(“搜索”)
}
}
}
}
结构子视图:视图{
@观察对象变量daApi:API
变量数组=[1,2,3]
var body:一些观点{

ForEach(0..您正在使用两个API。您应该去观看过去两个WWDC中的SwiftUI数据流视频。这回答了您的问题吗?是的,回答了,谢谢。我发誓我已经做了,但我很愚蠢,这已经解决了。再次感谢