向纯 swift 类添加委托协议一致性
我正在使用一个声明开放类 A 的包,我无法修改它。
在我的代码中,我想声明类 B 继承自这个 A 类,并且还符合委托协议(HMHomeManagerDelegate在我的情况下)。
class B: A, HMHomeManagerDelegate {
编译器告诉我:“无法在 Swift 中声明符合 'NSObjectProtocol';'HomesList' 应该继承 'NSObject'” - 那是因为HMHomeManagerDelegate继承自NSObjectProtocol,因此我将在 B 中提供所有 NSObjectProtocol 所需的方法。
但这意味着很多样板代码(其中一些是不平凡的)......
有没有更好的模式?
回答
一种可能的选择是创建一个单独的类MyHome,它实现HMHomeManagerDelegate,然后在类内部使用它B。
class MyHome: NSObject, HMHomeManagerDelegate { ... }
class B: A {
let myHome = MyHome()
// and all communication with HomeKit will go through MyHome class
// ...
}
如果您的项目很小,我想它MyHome看起来就像一个无用的包装器。但是在一个更大的应用程序中,我可以想象它MyHome负责与 HomeKit 的便捷通信,因此class B在MyHome为它提供服务的同时做出决定(准备/修改一些进/出 HomeKit 的数据)。