Dev*_*shi 4 access-control swift
我正在研究一个要点:PasteboardWatcher.swift,我调用了这样的NSTimer对象:
func startPolling () {
// setup and start of timer
timer = NSTimer.scheduledTimerWithTimeInterval(2, target: self, selector: Selector("checkForChangesInPasteboard"), userInfo: nil, repeats: true)
}
Run Code Online (Sandbox Code Playgroud)
checkForChangesInPasteboard函数的定义是:
func checkForChangesInPasteboard() {
// definition continues..
}
Run Code Online (Sandbox Code Playgroud)
我不想将函数暴露checkForChangesInPasteboard给其他类,因此我想将其标记为私有,但出于某种原因,当我这样做时,它会抛出异常:
-[PasteboardWatcher.PasteboardWatcher checkForChangesInPasteboard]: unrecognized selector sent to instance
Run Code Online (Sandbox Code Playgroud)
如果我没有将其标记为私有,则可以完美地运行.
有什么方法可以将此方法保持为私有,将其隐藏在其他类中?
根据使用Swift与Cocoa和Objective-C:
"使用私有修饰符标记的声明不会出现在生成的标题中.私有声明不会暴露给Objective-C,除非它们也明确标记为@IBAction,@ IBMOutlet或@objc."
摘录自:Apple Inc."将Swift与Cocoa和Objective-C一起使用(Swift 2 Prerelease)."iBooks.https://itun.es/us/utTW7.l
因此,您可以使用标记功能@objc来获得所需的行为.我刚刚在我的一个应用程序中对此进行了测试,其中我使用了公共可见性,因为我认为Objective-C根本看不到私有声明,并且在标记为私有和装饰时起作用@objc.
我刚刚看到了这个相关的问题:使用目标选择器进行Swift访问控制 - 基本上是相同的,但我认为你的是以更一般的方式措辞,所以不是严格的重复.
| 归档时间: |
|
| 查看次数: |
449 次 |
| 最近记录: |