【问题标题】:Why @objc in "UITapGestureRecognizer"?为什么在“UITapGestureRecognizer”中使用 @objc?
【发布时间】:2019-01-29 12:24:56
【问题描述】:

我将UITapGestureRecognizer 添加到我的UIView。但我不明白为什么我必须使用@objc 才能使用UITapGestureRecognizer

尤其是Selector?#selector 之间的区别太令人困惑了。

我没有在official document of the Apple developer 中看到使用@objc 的解释。

import UIKit

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()

        let viw = UIView(frame: CGRect(x: 0, y: 0, width: 200, height: 200))
        viw.center = self.view.center
        viw.backgroundColor = UIColor.black
        self.view.addSubview(viw)

        let tap = UITapGestureRecognizer(target: self, action: #selector(handleTap(sender:)))
        viw.addGestureRecognizer(tap)
    }

    @objc func handleTap(sender: UITapGestureRecognizer) {
        if sender.state == .ended {
            print(1)
        }
    }
}

我认为这是一种古老的方式。如果有最新的方法可以将UITapGestureRecognizer 添加到UIView,我很想知道。

【问题讨论】:

    标签: uitapgesturerecognizer swift4.2


    【解决方案1】:

    为什么要@objc?

    如果您使用的是基本上用Objective-C 编写的任何类选择器,那么您需要在该函数之前添加@objc,以便UITapGestureRecognizer 类可以通过适当的事件恢复。

    如果您没有在手势处理函数编译器之前添加@objc,则会抛出如下所述的错误:

    '#selector' 的参数是指实例方法 'handleTap()' 没有暴露在 Objective-C 中

    它清楚地表明你没有暴露你对Objective-C的句柄。

    Apple 官方链接语言互操作性

    https://developer.apple.com/documentation/swift#2984801

    还可以查看此链接了解更多信息

    Use runtime Obj C features in Swift

    希望你能在解释上面得到你的答案!

    【讨论】:

    • 谢谢你的好意。
    猜你喜欢
    • 2013-06-16
    • 1970-01-01
    • 2017-08-04
    • 1970-01-01
    • 1970-01-01
    • 2018-08-14
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    相关资源
    最近更新 更多