我想知道我是否可以在swift中隐藏采用协议.
在Objective-C中,我将使用m.-file中的私有头来隐藏我不希望暴露给外部的协议.这样的事情可以迅速吗?在协议之前放置"私有"不起作用,显然:)
eye*_*llz 10
编辑:找到一种隐藏它的简单方法.至少从xcode快速帮助信息:只是将采用和实现放在你的类的扩展中,它不会出现在那里.
原答案:
我想出了这个例子,受到Java内部类的启发.这里MyVC没有公开它UICollectionViewDelegate为内部目的实现,而委托实现可以访问MyVC私有变量.
public class MyVC: UIViewController {
private let a = 4 as Int
private var hiddenDelegate: HiddenDelegateImpl?
public override func viewDidLoad() {
super.viewDidLoad()
hiddenDelegate = HiddenDelegateImpl(outer: self)
innerCollectionView.delegate = hiddenDelegate
}
}
private class HiddenDelegateImpl: NSObject, UICollectionViewDelegate {
private weak var outer: MyVC?
init(outer: MyVC) {
self.outer = outer
super.init()
}
private func doStuff() -> Int {
// can access private variables of outer class
return outer?.a
}
// implement delegate methods here
}
Run Code Online (Sandbox Code Playgroud)
请注意,HiddenDelegateImpl这也可能是MyVC的内部类,我选择将其放在外面以便于阅读.
与内部类的Java实例相比,需要存在外部类的实例.由于Swift不是这种情况,我们需要有outer解决方法.
还有一个很好的例子,它侧重于委托实现.
编辑:使委托在外部类中的实例变量保留它,并且对外部类的引用为弱以避免保留循环.
| 归档时间: |
|
| 查看次数: |
3863 次 |
| 最近记录: |