Swift #selector语法
Swift #selector语法

Swift #selector语法

在使用Swift的过程中,可能会遇到包含 #selectore 的代码:

helpMenu.addItem(withTitle: "访问帮助页面", action: #selector(openHelp), keyEquivalent: "?")

#selector 是 Swift 中用来引用 Objective-C 方法(即“选择器”)的语法,它的作用是告诉系统:当某个事件发生时,应该调用哪个方法。

什么是 Selector?

Selector 是 Objective-C 世界中的一个概念,表示方法的名称,用于动态调用方法。

例如:

@objc func quitApp() {
    NSApp.terminate(nil)
}

可以用 Selector 来引用这个方法:

let quitItem = NSMenuItem(title: "退出", action: #selector(quitApp), keyEquivalent: "q")

系统就知道,当用户点击这个菜单项时,要调用 quitApp() 方法。

语法说明

#selector(方法名)

或者如果方法带参数:

#selector(methodName(_:))

比如:

@objc func showAlert(_ sender: Any?) {
    // ...
}
button.action = #selector(showAlert(_:))

为什么要加 @objc?

因为 Selector 属于 Objective-C 的运行时机制,Swift 方法默认是静态调度的(编译时确定),必须加 @objc 才能暴露给运行时,也才能被 #selector 使用。

@objc func xxx() {} // 可以 selector
func xxx() {} // 编译错误(不是 @objc)

总结

#selector是Swift 中引用 Objective-C 方法的一种语法,常用于按钮、菜单、通知等回调触发,被引用的方法必须加 @objc 修饰。

在SwiftUI中使用闭包处理事件:

Button("退出") {
    NSApp.terminate(nil)
}

而 AppKit / UIKit 中使用 Selector,更接近 Objective-C 风格。

   

如果您认为这篇文章给您带来了帮助,您可以在此通过支付宝或者微信打赏网站开发者。

欢迎加入我们的 微信交流群QQ交流群,交流更多精彩内容!
微信交流群二维码 QQ交流群二维码

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注