swift – NSTimer不会调用私有func作为选择器

swift – NSTimer不会调用私有func作为选择器,第1张

概述我正在研究一个要点: PasteboardWatcher.swift,其中我调用了这样的NSTimer对象: func startPolling () { // setup and start of timer timer = NSTimer.scheduledTimerWithTimeInterval(2, target: self, selector: Sele 我正在研究一个要点: PasteboardWatcher.swift,其中我调用了这样的NSTimer对象:
func startPolling () {        // setup and start of timer        timer = NSTimer.scheduledTimerWithTimeInterval(2,target: self,selector: Selector("checkForChangesInPasteboard"),userInfo: nil,repeats: true)}

checkForChangesInPasteboard函数的定义是:

func checkForChangesInPasteboard() {        // deFinition continues..}

我不想将函数checkForChangesInPasteboard暴露给其他类,因此我想将其标记为私有,但出于某种原因,当我这样做时,它会抛出异常:

-[PasteboarDWatcher.PasteboarDWatcher checkForChangesInPasteboard]: unrecognized selector sent to instance

如果我没有将其标记为私有,则它可以完美地运行.

有什么方法可以将此方法保持为私有,将其隐藏在其他类中?

根据使用Swift与Cocoa和Objective-C:

“使用私有修饰符标记的声明不会出现在生成的标题中.私有声明不会暴露给Objective-C,除非它们明确地标记为@IBAction,@ IBOutlet或@objc.“

摘录自:Apple Inc.“将Swift与Cocoa和Objective-C一起使用(Swift 2 Prerelease).”iBooks. https://itun.es/us/utTW7.l

因此,您可以使用@objc标记您的函数以获得所需的行为.我刚刚在我的一个应用程序中测试了这个,我使用了公共可见性,因为我认为Objective-C根本看不到私有声明,并且当标记为私有并且用@objc装饰时它可以工作.

我刚刚看到了这个相关的问题:Swift access control with target selectors – 基本上是相同的事情,但我认为你的是以更一般的方式措辞,所以不严格地重复.

总结

以上是内存溢出为你收集整理的swift – NSTimer不会调用私有func作为选择器全部内容,希望文章能够帮你解决swift – NSTimer不会调用私有func作为选择器所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1050293.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存