有没有办法让 "viewWillAppear" 函数在 swiftUI 中初始化 class 并在初始化之前阻止引用?
Is there a way to have a "viewWillAppear" fuction that inizalises a class in swiftUI and prevents refrences until inialized?
我正在寻找一种在 SwiftUI 中加载视图之前初始化 class 的方法。这个 class 有两个参数,它们是初始化器的 self
和一个 Int
值。然后在初始化时我想在 Class 中调用一个 get 方法并获取要显示的一组 facebook 视频(加载在 WebKit 中)。我遇到的问题是,如果我过早地获取 get 方法,它就会崩溃,然后它不会让我创建一个 var/let,我的 View 的 self 类型调用它。对我来说,我似乎需要某种完成处理程序,但我不知道在这种情况下该怎么做。
这是我的 fetchDataBook
class 的一部分,正在初始化以从我有权访问的 Facebook 页面获取信息,以及在视图加载值之前需要初始化的内容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 视图的基本结构:
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 {
}
}
谢谢,如果您需要更多信息,我很乐意对此进行编辑以进行澄清。这几天一直是个问题,我找不到解决办法,也不好问。谢谢。
我的问题的答案正如 Paulw11 所说 你的模型应该 @Publish 一个可选的。 这很完美,只要我添加了一个 Bool 值,一旦设置了值,该值就会更改,因为它没有用我的 WebView2 数组正确更新。然后我只在 class 的实例上使用 @ObservedObject 并且它与 Bool 值的 if 检查完美配合。感谢@Paulw11 的建议。
我正在寻找一种在 SwiftUI 中加载视图之前初始化 class 的方法。这个 class 有两个参数,它们是初始化器的 self
和一个 Int
值。然后在初始化时我想在 Class 中调用一个 get 方法并获取要显示的一组 facebook 视频(加载在 WebKit 中)。我遇到的问题是,如果我过早地获取 get 方法,它就会崩溃,然后它不会让我创建一个 var/let,我的 View 的 self 类型调用它。对我来说,我似乎需要某种完成处理程序,但我不知道在这种情况下该怎么做。
这是我的 fetchDataBook
class 的一部分,正在初始化以从我有权访问的 Facebook 页面获取信息,以及在视图加载值之前需要初始化的内容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 视图的基本结构:
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 {
}
}
谢谢,如果您需要更多信息,我很乐意对此进行编辑以进行澄清。这几天一直是个问题,我找不到解决办法,也不好问。谢谢。
我的问题的答案正如 Paulw11 所说 你的模型应该 @Publish 一个可选的。 这很完美,只要我添加了一个 Bool 值,一旦设置了值,该值就会更改,因为它没有用我的 WebView2 数组正确更新。然后我只在 class 的实例上使用 @ObservedObject 并且它与 Bool 值的 if 检查完美配合。感谢@Paulw11 的建议。