有没有一种方法可以让 "viewWillAppear "功能在swiftUI中初始化一个类,并且在初始化之前防止刷新?

问题描述 投票:0回答:1

我正在寻找一种方法,在SwiftUI中加载View之前初始化一个类。 这个类需要两个参数,分别是 self 的初始化器和一个 Int 的值,然后当初始化时,我想在Class里面调用get方法,得到facebook视频的数组(加载在WebKit中)来显示。 然后,当初始化时,我想在Class里面调用get方法,得到一个数组的facebook视频(在WebKit中加载)来显示。 我遇到的问题是,如果我过早地调用get方法,它就会崩溃,然后它不会让我创建一个调用View的self类型的varlet。 在我看来,我似乎需要某种完成处理程序,但我不知道该怎么做。

下面是我的一部分 fetchDataBook 类的初始化,以便从我有权限的Facebook页面获取信息,以及在View加载以下值之前需要初始化的内容 getWebView().

    private let upperBoundRange: Int

    private var requests = [URLRequest]()
    private var WebViews = [WebView2]()

    init(upperBoundRange: Int) {
        self.upperBoundRange = upperBoundRange

        getToken()
    }

    //
    //
    // Create some sort of completsion handler to tell when it is safe to fetch webviews
    //
    //

    func getwebView(index: Int) -> WebView2 {
        print("Get views", WebViews[index])
        return WebViews[index]
    }

    private func setWebViews() {
        for i in 0...upperBoundRange {
            WebViews.append(WebView2(parent: parent, request: requests[i]))
        }
    }

    private func setLinks(data: NSArray) {
     // Code Not Shown to get links for setWebViews()
    }

    // Fetches FaceBook URL for Livestream
    private func getJSON(token: String) {
     // code not shown
    }

    private func getToken() {
      // code now shown
    }

这是我的SwiftUI视图的基本struture。

struct LiveMaster : View {
let fb = fetchDataBook(upperBoundRange 4)

ScrollView{
    VStack {
     self.fb.getwebView(index: 0)
     // Each displays WebSite from fetch in fetchDataBook class but cannot display them until the var in fetchDataBook has the values
    }

   VStack {

    }

    VStack {

    }

    VStack {

    }
}

谢谢你,如果你需要更多的信息,我很乐意编辑这个来澄清。 这个问题在过去的几天里,我一直找不到解决的办法,也没有一个简单的方法去问。 谢谢你。

ios swift swiftui webkit
1个回答
0
投票

我的问题的答案就像Paulw11说的那样。你的模型应该@发布一个可选的。 这工作完美,只要我添加一个Bool值,一旦设置了值就会改变,因为它没有正确更新我的WebView2的数组。 然后,我只要在我的那个类的实例上使用@ObservedObject,就可以完美地使用该Bool值的if检查。 谢谢@Paulw11的建议。

© www.soinside.com 2019 - 2024. All rights reserved.