加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在swift中隐藏采用协议

发布时间:2020-12-14 05:58:15 所属栏目:百科 来源:网络整理
导读:我想知道我是否可以在swift中隐藏采用协议。 在Objective-C中,我将使用m.-file中的私有头来隐藏我不想暴露给外部的协议。 这样的事情是否可以迅速?在协议之前放置“私有”不起作用,显然是:) 编辑:找到一个简单的方法来隐藏它。至少从xcode快速帮助信息:
我想知道我是否可以在swift中隐藏采用协议。

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

编辑:找到一个简单的方法来隐藏它。至少从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
}

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

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读