我正在swift中开发一个框架。我正在创建一个处理框架中BLE内容的类。这个类应该是公共的,因为我需要从使用我的框架的外部应用程序访问这个类。我的类结构如下:
public class MyClass: NSObject, CBCentralManagerDelegate {
}
这里的MyClass
是public的,它确认了一个public协议CBCentralManagerDelegate
。编译器强迫我声明它的委托方法是public的。所以我的实现看起来是这样的:
public class MyClass: NSObject, CBCentralManagerDelegate {
public func centralManager(central: CBCentralManager, didConnectPeripheral peripheral: CBPeripheral) {
}
// I don't want delegate methods to be public, delegate methods should be like:
//func centralManager(central: CBCentralManager, didConnectPeripheral peripheral: CBPeripheral) {
//}
}
我已经研究了苹果的文档here和一个问题here。我开始知道,因为我的类和协议都是公共的,所以方法应该是公共的。
这样做的问题是,外部应用程序可以很容易地创建我的类的示例并调用此方法,这是我的框架所不期望的。
我希望将委托方法保持为私有,这样就没有人可以手动调用它们。
我有什么可能的解决方案?
1条答案
按热度按时间fsi0uk1n1#
试图将公共协议的方法隐藏在公共类中没有多大意义,因为这首先就违背了使用协议的目的。
如果你真的需要隐藏它们,你可以添加一个私有的示例变量来代替类本身作为一个委托,如下所示:
然后在
DelegateType
中实现委托方法。