gpt4 book ai didi

ios - swift 中的 Target-Action 不遵守默认参数

转载 作者:行者123 更新时间:2023-11-28 11:00:04 25 4
gpt4 key购买 nike

我有一个 UIBarButtonItem,我想显示一个抽屉菜单。

我已经实现了一个看起来像这样的函数:

func showMenu(animated: Bool = true) {
self.rootViewController.presentViewController(self.menuViewController, animated: animated, completion: nil)
}

这是在名为 HomeCoordinator 的类中实现的

现在,我已将目标和操作添加到我的 UIBarButtonItem,如下所示:

    s.menuItem.target = self
s.menuItem.action = #selector(HomeCoordinator.showMenu)

当通过 barbuttonitem 执行 showMenu 函数时,动画参数为 false。为什么是这样?我可以在不改变功能的情况下改变它吗?

谢谢!

最佳答案

这有两个问题。

问题 A 与您问题的核心相关:为什么不应用默认参数。这是因为 Objective-C 不支持默认参数,而 UIBarButtonItem 是一个 Objective-C 类。它对您在 Swift 中分配的默认参数一无所知。仅当您从 Swift 中调用该函数时才会注入(inject)默认参数。

问题 B 与 Cocoa(目标) Action 的签名有关。您通常可以省略参数,但是您分配给 Cocoa 控件的操作总是将 sender 作为第一个参数(负责调用操作的对象),如下所示:

func showMenu(_ sender: UIBarButtonItem) { ... }

所有操作都应遵循此签名。

所以你可能应该将两者分开:

func showMenu(animated: Bool = true) {
self.rootViewController.presentViewController(self.menuViewController,
animated: animated,
completion: nil)
}

func onShowMenu(_ sender: Any) {
showMenu()
}

s.menuItem.target = self
s.menuItem.action = #selector(HomeCoordinator.onShowMenu)

关于ios - swift 中的 Target-Action 不遵守默认参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41151614/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com