向纯 swift 类添加委托协议一致性

Air*_*ène 2 protocols ios swift

我正在使用一个声明开放类 A 的包,我无法修改它。

在我的代码中,我想声明类 B 继承自这个 A 类,并且还符合委托协议(HMHomeManagerDelegate在我的情况下)。

class B: A, HMHomeManagerDelegate {

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

但这意味着很多样板代码(其中一些是不平凡的)......

有没有更好的模式?

ale*_*cpp 5

一种可能的选择是创建一个单独的类MyHome,它实现HMHomeManagerDelegate,然后在类内部使用它B

class MyHome: NSObject, HMHomeManagerDelegate { ... }

class B: A {
    let myHome = MyHome()

    // and all communication with HomeKit will go through MyHome class
    // ...
}
Run Code Online (Sandbox Code Playgroud)

如果您的项目很小,我想它MyHome看起来就像一个无用的包装器。但是在一个更大的应用程序中,我可以想象它MyHome负责与 HomeKit 的便捷通信,因此class BMyHome为它提供服务的同时做出决定(准备/修改一些进/出 HomeKit 的数据)。