Swift 中带有自定义函数调用的小吃店
snackbar with custom Function call in Swift
我在我的应用程序中使用 snackBar,它在我的应用程序中运行良好,但我想从 SnackBar 操作块访问自定义函数。
我可以试试显示
- 实例成员 'uncheck' 不能用于类型 'DetailsInfoViewController' 您是否打算改用此类型的值?
这是代码
let snackbar = TTGSnackbar(message: "Attendance Update !",
duration: .long,
actionText: "SEND",
actionBlock: {
(snackbar) in
uncheck()
print("snack bar Action")
})
func uncheck()
{
print("snackbar uncheck function")
snackbarCount -= 1
checkSnackBar()
}
如何访问snack Bar actionBlock里面的自定义函数?
我假设您已经在 class func
或类似的东西中初始化了 snackbar
。从这个地方self
代表你的classDetailsInfoViewController
而你需要这个class的对象。如果你在snackbar
之前初始化这个对象,你可以这样写:
let controller: DetailsInfoViewController = ...
let snackbar = TTGSnackbar(message: "Attendance Update !", duration: .long, actionText: "SEND") { [weak controller] (snackbar) in
controller?.uncheck()
print("snack bar Action")
}
如果对您没有帮助,请 post 您正在创建的函数代码 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() {}
}
当你的 class 需要 self
内部闭包时,你发现了非常棘手的情况,因为它初始化 但是 这个 snackbar
变量在我们有之前初始化即用型 self
变量。这意味着我们需要在 self
之后使用 lazy var
.
初始化 snackbar
但是我强烈建议你不要像你写的那样写代码。 TTHSnackbar author's example 被设计成当这个 snackbar 真的需要显示时放在一个函数中。例如:
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()
}
}
我在我的应用程序中使用 snackBar,它在我的应用程序中运行良好,但我想从 SnackBar 操作块访问自定义函数。
我可以试试显示
- 实例成员 'uncheck' 不能用于类型 'DetailsInfoViewController' 您是否打算改用此类型的值?
这是代码
let snackbar = TTGSnackbar(message: "Attendance Update !",
duration: .long,
actionText: "SEND",
actionBlock: {
(snackbar) in
uncheck()
print("snack bar Action")
})
func uncheck()
{
print("snackbar uncheck function")
snackbarCount -= 1
checkSnackBar()
}
如何访问snack Bar actionBlock里面的自定义函数?
我假设您已经在 class func
或类似的东西中初始化了 snackbar
。从这个地方self
代表你的classDetailsInfoViewController
而你需要这个class的对象。如果你在snackbar
之前初始化这个对象,你可以这样写:
let controller: DetailsInfoViewController = ...
let snackbar = TTGSnackbar(message: "Attendance Update !", duration: .long, actionText: "SEND") { [weak controller] (snackbar) in
controller?.uncheck()
print("snack bar Action")
}
如果对您没有帮助,请 post 您正在创建的函数代码 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() {}
}
当你的 class 需要 self
内部闭包时,你发现了非常棘手的情况,因为它初始化 但是 这个 snackbar
变量在我们有之前初始化即用型 self
变量。这意味着我们需要在 self
之后使用 lazy var
.
snackbar
但是我强烈建议你不要像你写的那样写代码。 TTHSnackbar author's example 被设计成当这个 snackbar 真的需要显示时放在一个函数中。例如:
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()
}
}