我正在研究要点:PasteboardWatcher.swift,在其中我像这样调用了NSTimer对象:
func startPolling () { // setup and start of timer timer = NSTimer.scheduledTimerWithTimeInterval(2, target: self, selector: Selector("checkForChangesInPasteboard"), userInfo: nil, repeats: true) }
checkForChangesInPasteboard函数的定义是:
checkForChangesInPasteboard
func checkForChangesInPasteboard() { // definition continues.. }
我不想将函数公开checkForChangesInPasteboard给其他类,因此我想将其标记为私有,但是由于某种原因,它抛出以下异常:
-[PasteboardWatcher.PasteboardWatcher checkForChangesInPasteboard]: unrecognized selector sent to instance
如果我不将其标记为私有,那么它会完美运行。
我有什么办法可以将此方法保留为私有方法,对其他类隐藏呢?
根据将 Swift与Cocoa和Objective-C结合使用 :
“标有private修饰符的声明不会出现在生成的标题中。除非将私有声明也使用@ IBAction,@ IBOutlet或@objc进行显式标记,否则它们不会公开给Objective-C。”
摘自:苹果公司。“将Swift与Cocoa和Objective-C结合使用(Swift 2预发行版)。” iBooks。https://itun.es/us/utTW7.l
因此,您可以标记函数@objc以获取所需的行为。我只是在其中一个使用公开可见性的应用程序中对此进行了测试,因为我认为Objective- C根本看不到私有声明,并且在标记为private并用修饰时可以正常工作@objc。
@objc
我刚刚看到了一个相关的问题:具有目标选择器的Swift访问控制 —基本上是同一件事,但我认为您的表达方式较为笼统,因此不能严格重复。