向纯 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 BMyHome为它提供服务的同时做出决定(准备/修改一些进/出 HomeKit 的数据)。


以上是向纯 swift 类添加委托协议一致性的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>