SwiftUI-如何从单独的类触发警报

时间:2019-10-31 00:22:28

标签: ios swift xcode swiftui

我有一个叫做Startup的类。在此类中,我有一堆在应用启动时从SceneDelegate调用的函数。

例如:

class Startup {

   func doThis() {

     print("I'm doing this")

   }
}

如果有必要,它有时可以下载数据。发生这种情况时,我想触发一个带有活动指示器的警报,以阻止用户输入UI直到完成操作。

我在ContentView中设置了所有活动指示器警报,该警报在EnvironmentObject var Bool上触发。因此,要激活此UI阻止警报,我要做的就是切换我的环境变量。

我遇到的问题是我无法从我的班级内触发此环境变量。我尝试了以下方法:

当我放@EnvironmentObject var dataBusy: DataBusy时 并从函数dataBusy.isBusy = true中调用它,我收到错误消息:

  

致命错误:未找到DataBusy类型的ObservableObject。

哪个表明我需要在实例化env对象时将其推入类的环境,但是,当我尝试这样做时,我得到:

  

元组类型'()'的值没有成员'environmentObject'

因此,我无法将此env var添加到此类对象中。

尝试使用:

@ObservedObject var dataBusy = DataBusy()

在我的课堂上,似乎没有出错,但是切换此操作不会触发我的事件。

我想不出任何其他方法来通过此启动类与View进行通信。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

以下代码有效,许多人发现自己遗漏或误解的地方。

linewidth

答案 1 :(得分:0)

知道了。

E.Coms的回答非常好,但是,我正在调用func,该func将从另一个函数内部,另一个类的另一个函数而不是直接由场景委托负责此操作。

要获得它,我必须将DataBusy对象dataBusy从场景委托传递给类func作为参数:

//Scene Delegate:

let dataBusy = DataBusy() //my Observed Object Class
let myClass = MyClass();  //instantiate my class 

myClass.myFunc(data: dataBusy) //pass the object through to the class function

这样,当我的类函数中出现时间时,我可以切换变量,并且一切正常。

谢谢您的输入。