ios – Swift使用选择器参数,如封闭

我只是想知道是否可以将功能传递给按钮动作(通常是选择器).

例如,通常我会说:

UIBarButtonItem(title: "Press",style: .Done,target: self,action: "functionToCall")

func functionToCall() {
    // Do something
}

但是我想知道是否可以做一些类似的事情:

UIBarButtonItem(title: "Press",action: {
    // Do Something
})

我想这样做的原因是因为我的功能是超级简单的,而且看起来像是更加干净和更Swift,就像他们关闭的重点一样.

解决方法

这是Swift 3的更新解决方案.
class BlockBarButtonItem: UIBarButtonItem {
  private var actionHandler: ((Void) -> Void)?

  convenience init(title: String?,style: UIBarButtonItemStyle,actionHandler: ((Void) -> Void)?) {
    self.init(title: title,style: style,target: nil,action: #selector(barButtonItemPressed))
    self.target = self
    self.actionHandler = actionHandler
  }

  convenience init(image: UIImage?,actionHandler: ((Void) -> Void)?) {
    self.init(image: image,action: #selector(barButtonItemPressed))
    self.target = self
    self.actionHandler = actionHandler
  }

  func barButtonItemPressed(sender: UIBarButtonItem) {
    actionHandler?()
  }
}

相关文章

当我们远离最新的 iOS 16 更新版本时,我们听到了困扰 Apple...
欧版/美版 特别说一下,美版选错了 可能会永久丧失4G,不过只...
一般在接外包的时候, 通常第三方需要安装你的app进行测...
前言为了让更多的人永远记住12月13日,各大厂都在这一天将应...