我正在使用以下方法来显示 toast 消息
DispatchQueue.main.async {
Toastmessage = MyToasts(title: "Message Here" , type: .success)
mysettings.showMytoast = true // mysettings is an Environment variable
}
我这样添加的原因是因为 toast 是由于操作(从列表中删除项目)而发生的,并且从响应更新视图存在延迟。
现在的问题是,在我杀死该应用程序之前,吐司不会被解雇。 有什么解决办法吗?
我认为你应该在一段时间后 showMyToast = false。
你可以这样做:
DispatchQueue.main.async {
Toastmessage = MyToasts(title: "Message Here" , type: .success)
mysettings.showMytoast = true // mysettings is an Environment variable
let closeAfterSecond = 1
DispatchQueue.main.asyncAfter(deadline: .now() + closeAfterSecond) {
mysettings.showMytoast = false
}
}
我遇到了类似的问题,解决方案是将 Toast 的表示绑定到绑定 bool 参数
isPresenting: Binding<Bool>
然后在该 bool 的初始化中,添加一个带有 asyncAfter 的 didSet,将其自身设置回 false。
Toastmessage = MyToasts(title: "Message Here" , type: .success, isPresenting: showMyToast)
还有
@Published var showMyToast = false {
didSet {
if showMyToast {
DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
self.showMyToast = false
}
}
}
}
这会强制在设定的时间后取消 Toast