【问题标题】:swift 3 selector with arguments带参数的 swift 3 选择器
【发布时间】:2017-04-13 11:46:42
【问题描述】:

我在 Swift 3 中搜索了很多选择器方法,但我对它有很多困惑。

1) Selector#selector 有什么区别?

2)如果我用Selector写,功能被概述意味着不可用?

3) 如何使用#selector 方法传递参数。

我的代码

let button = UIButton()     
button.addTarget(self, action: #selector(getData(_:true)), for: .touchUpInside)
button.addTarget(self, action: Selector(), for: .touchUpInside)

func getData(_ isShowing:Bool){

    }

你能帮我解开疑惑吗?

感谢您宝贵的时间

【问题讨论】:

  • 关于问题3。直接使用#selector(getData)即可,无需指定参数。
  • @LeoDabus,感谢您的回答,但我必须传递一个值来检查条件。
  • 发送者是UIButton,所以把方法参数改成(_ button: UIButton)
  • 传递值是什么意思?你不能在选择器中传递true

标签: ios iphone swift xcode swift3


【解决方案1】:

回答您的问题:

  1. 选择器是一种类型。 (表示它是一个函数类型)。而 #selector 是调用函数。 #selector --> 将返回 Selector 类型。 #selector 检查是否存在具有该函数名称的任何函数
  2. 第一个答案会澄清这一点
  3. 您可以像这样通过发送者发送值。示例:button.layer.setValue(forKey:"someKey")

【讨论】:

  • 至于#3:您不能对任意值执行此操作,仅适用于符合 KVO 的值。至于OP想要什么,他不能通过这种方式传递他的Bool
  • 第 3 步帮助我通过了布尔值。斯威夫特 5,iOS 13.6
【解决方案2】:

我相信#selector 只是一种创建Selector 类型对象的语言结构。您想使用#selector,因为编译器实际上会检查该方法是否存在于任何地方,而使用Selector("abc"),您只需运行构造函数并且它没有经过验证。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-17
    • 1970-01-01
    • 1970-01-01
    • 2018-05-02
    • 2012-04-15
    • 2017-03-10
    相关资源
    最近更新 更多