为什么委托方法需要在Swift中公开?

时间:2015-12-08 11:18:56

标签: ios class swift2 protocols

我正在研究swift中的框架。我正在创建一个在框架中处理BLE内容的类。这个类应该是公共的,因为我需要从使用我的框架的外部应用程序访问这个类。我的班级结构如下:

$rootScope.location

此处public class MyClass: NSObject, CBCentralManagerDelegate { } 是公开的,它确认了公共协议MyClass。编译器强迫我将其委托方法声明为公共方法。所以这就是我的实现:

CBCentralManagerDelegate

我浏览了苹果文档here和SO问题here。我开始知道,由于我的课程和协议都是公开的,所以这些方法应该是公开的。

问题是,外部应用程序可以轻松创建我的类的实例并调用此方法,我的框架并不期望这样。

我想将委托方法保密,因此没有人可以手动调用它们。

我有什么可能的解决方案?

1 个答案:

答案 0 :(得分:2)

尝试在公共类中隐藏公共协议的方法没有多大意义,因为它首先违背了使用协议的目的。

如果你真的需要隐藏它们,你可以添加一个私有实例变量,它将充当委托而不是类本身:

public class MyClass: SomeClass
 {
    private let someVariable
    private var subdelegate :DelegateType?

    public override func viewDidLoad()
    {
        super.viewDidLoad()
        subdelegate = DelegateType(parent: self)
        someOtherObject.delegate = subdelegate
    }
}

然后在DelegateType

中实现委托方法
private class DelegateType : NSObject, HiddenProtocol 
{
    private weak var parent: MyClass?

    init(parent: MyClass)
     {
        super.init()
        self.parent = parent
    }

    // Implement delegate methods here by accessing the members 
    // of the parent through the 'parent' variable
}