在swift中隐藏采用协议

前端之家收集整理的这篇文章主要介绍了在swift中隐藏采用协议前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想知道我是否可以在swift中隐藏采用协议。

在Objective-C中,我将使用m.-file中的私有头来隐藏我不想暴露给外部的协议。
这样的事情是否可以迅速?在协议之前放置“私有”不起作用,显然是:)

编辑:找到一个简单的方法来隐藏它。至少从xcode快速帮助信息:只是把通过和实现在你的类的扩展,它不会显示在那里。

原始答案:

我想出了这个例子,灵感来自Java中的内部类。这里MyVC不会公开它实现UICollectionViewDelegate用于内部目的,而委托实现可以访问MyVC的私有变量。

  1. public class MyVC: UIViewController {
  2.  
  3. private let a = 4 as Int
  4. private var hiddenDelegate: HiddenDelegateImpl?
  5.  
  6. public override func viewDidLoad() {
  7. super.viewDidLoad()
  8. hiddenDelegate = HiddenDelegateImpl(outer: self)
  9. innerCollectionView.delegate = hiddenDelegate
  10. }
  11. }
  12.  
  13. private class HiddenDelegateImpl: NSObject,UICollectionViewDelegate {
  14.  
  15. private weak var outer: MyVC?
  16.  
  17. init(outer: MyVC) {
  18. self.outer = outer
  19. super.init()
  20. }
  21.  
  22. private func doStuff() -> Int {
  23. // can access private variables of outer class
  24. return outer?.a
  25. }
  26.  
  27. // implement delegate methods here
  28. }

请注意,HiddenDelegateImpl也可以是MyVC的内部类,我选择将其放在外面,以便可读性。

与内部类的Java实例相反,需要外部类的实例存在。由于Swift不是这样,我们需要有外部的解决方法

还有this nice example专注于委托执行。

编辑:使外部类中的一个实例变量委托给它,以保留外部类的引用,以避免保留循环。

猜你在找的Swift相关文章