请看下面的示例代码:

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let letterButton = UIButton.buttonWithType(.Custom) as UIButton
        self.view.addSubview(letterButton)
        letterButton.addTarget(self, action:Selector("buttonDidTap:"), forControlEvents: .TouchUpInside)

    }

    func buttonDidTap(button: UIButton!) {
        print(button.char)
    }

}

只要 Select 器是publicinternalUIButton的目标操作就可以正常工作,但如果是private,则会因unrecognized selector sent to instance而崩溃

我有没有办法做到这一点?我不想让tap函数公开或内部.

推荐答案

您需要@objc才能向objc运行时公开私有方法

@objc private func buttonDidTap(button:UIButton!) {
    println(button.char)
}

Xcode6 beta4 release notes

标记为private的声明不向Objective-C运行时公开

Swift相关问答推荐

我应该在自定义存储队列上使用弱self 吗?

动画过程中的SwiftUI重绘视图

如何在visionOS上删除PhotosPicker背景 colored颜色 ?

格式化单位和度量值.为什么从符号初始化的单位不能产生与静态初始化相同的结果

如何在每天午夜重置布尔值

从Swift中的泛型类继承?

如何增加 NSStatusBar 图像大小?

如何在设备(或常量)地址空间中创建缓冲区?

协议元类型'SomeProtocol.Type'上无法使用静态成员'currency'

Xcode 15 Beta中如何使用@Observable?

Swift iOS:确定贝塞尔曲线路径是否与 UIView 框架相交?

如何让默认函数参数引用另一个函数参数?

签署GoogleSignIn-GoogleSignIn需要开发团队

如何在 ZStack 中单独下移卡片?

SwiftUI Grid 中的数组旋转

ZStack 中的 ProgressView 与 View 的行为不同

为什么 `map(foo)` 和 `map{ foo($0) }` 返回不同的结果?

使用自定义相机拍照 iOS 11.0 Swift 4. 更新错误

如何快速格式化用户显示(社交网络等)的时间间隔?

如何在 iOS 上的 Swift 中获取 sharedApplication?