【问题标题】:Swift dynamic selector call (the old performSelector:)Swift 动态选择器调用(旧的 performSelector :)
【发布时间】:2015-03-03 03:42:34
【问题描述】:

我正在将我在 Obj-C 中的项目移植到 Swift 中,但我被困在我拥有的这种方法中:

textView: NSTextView, doCommandBySelector commandSelector: Selector) -> BOOL

在我之前的 objc 代码中

[textView performSelector:commandSelector withObject:nil];

但在 Swift 中,我不知道解决方案,如何实际编写代码行。

谁有解决办法?

上周我真的快疯了,即使在阅读了大量文档之后。

谢谢

【问题讨论】:

  • Swift 认为选择器本质上是不安全的,据我所知不支持旧的“performSelector”。 Swift 中有一个 Selector 类型,但它的用途是有限的。看看堆栈溢出,你会看到一些关于使用计时器作为解决方法的讨论。
  • 我已经查看了堆栈溢出的解决方案,但我真的不明白如何在 Swift 中编写那行代码。你知道怎么可能吗?
  • 我也试过计时器,它可以工作,但是当我按下删除键来更正/删除时,它违反了“完成:”方法。

标签: swift selector


【解决方案1】:

即使在 Objective-C 中,您也必须为此使用方法 -[UIApplication sendAction:to:from:forEvent:],因此在 Swift 中尝试如下操作:

UIApplication.sharedApplication()
    .sendAction(commandSelector, to: textView, from: self, forEvent: nil)

更多关于Apple Dev Forums的信息。

【讨论】:

    【解决方案2】:

    未来的读者可能想知道,performSelector 和同一家族的其他成员从 Swift 2 开始可用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-15
      • 2017-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多