将委托协议一致性添加到纯 swift class

Adding delegate protocol conformance to pure swift class

我使用的包声明了一个开放的 class A,我无法修改它。

在我的代码中,我想声明 class B 继承自此 A class,并且还符合委托协议(在我的例子中是 HMHomeManagerDelegate)。

class B: A, HMHomeManagerDelegate {

编译器告诉我:“无法声明符合 Swift 中的 'NSObjectProtocol';'HomesList' 应该继承 'NSObject'” - 那是因为 HMHomeManagerDelegate 继承自 NSObjectProtocol,因此我将在 B.

中提供所有 NSObjectProtocol 所需的方法

但这意味着很多样板代码(其中一些非常重要)...

还有更好的模式吗?

一个可能的选择是制作一个单独的 class MyHome,它实现 HMHomeManagerDelegate,然后在 class 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 服务它(prepares/modifies 一些数据 to/from HomeKit).