我假设您已经在 class func 或类似的东西中初始化了 snackbar。从这个地方self 代表你的类DetailsInfoViewController,而你需要这个类的对象。如果你在snackbar之前初始化这个对象,你可以这样写:
let controller: DetailsInfoViewController = ...
let snackbar = TTGSnackbar(message: "Attendance Update !", duration: .long, actionText: "SEND") { [weak controller] (snackbar) in
controller?.uncheck()
print("snack bar Action")
}
如果对您没有帮助,请在您创建snackbar的位置发布功能代码。
统一更新:
只需对代码进行最少的更改,以下解决方案应该可以工作:
class DetailsInfoViewController: UIViewController {
var snackbarCount = 0
lazy var snackbar = TTGSnackbar(message: "Attendance Update !", duration: .long, actionText: "SEND") { (snackbar) in
self.uncheck()
print("snack bar Action")
}
func uncheck() {
print("snackbar uncheck function")
snackbarCount -= 1
checkSnackBar()
}
func checkSnackBar() {}
}
当你的类在初始化时需要 self 在闭包内时,你发现了非常棘手的情况,但是这个 snackbar 变量在我们准备好使用的 self 变量之前初始化。这意味着我们需要在self 之后使用lazy var 初始化snackbar。
但我强烈建议您不要像编写代码那样编写代码。 TTHSnackbar author's example 设计用于在真正需要显示此小吃吧时放置在函数中。例如:
class DetailsInfoViewController: UIViewController {
@IBAction func showSnackbarButtonTapped(_ sender: UIButton) {
let snackbar = TTGSnackbar(message: "TTGSnackBar !", duration: .middle, actionText: "Action!") { (snackbar) in
self.uncheck()
print("snack bar Action")
}
snackbar.show()
}
}
当它显示在视图上时,它将被该视图保留。
UPD #2:
要一次只显示一个 Snackbar,您可以这样编写:
class DetailsInfoViewController: UIViewController {
private weak var currentSnackbar: TTGSnackbar?
@IBAction func showSnackbarButtonTapped(_ sender: UIButton) {
if let snackbar = currentSnackbar {
snackbar.dismiss()
currentSnackbar = nil
}
let snackbar = TTGSnackbar(message: "TTGSnackBar !", duration: .middle, actionText: "Action!") { (snackbar) in
self.uncheck()
print("snack bar Action")
}
currentSnackbar = snackbar
snackbar.show()
}
}