将委托协议一致性添加到纯 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).
我使用的包声明了一个开放的 class A,我无法修改它。
在我的代码中,我想声明 class B 继承自此 A class,并且还符合委托协议(在我的例子中是 HMHomeManagerDelegate
)。
class B: A, HMHomeManagerDelegate {
编译器告诉我:“无法声明符合 Swift 中的 'NSObjectProtocol';'HomesList' 应该继承 'NSObject'” - 那是因为 HMHomeManagerDelegate
继承自 NSObjectProtocol
,因此我将在 B.
但这意味着很多样板代码(其中一些非常重要)...
还有更好的模式吗?
一个可能的选择是制作一个单独的 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).