我有一个协议DatabaseObserver
:
protocol DatabaseObserver {
func removeObserver()
}
然后,我具有符合此DatabaseObserver
协议的以下通用类:
final class RtdbListener<Model: AnyObject>: DatabaseObserver {
func removeObserver() {}
}
现在我在另一个类中有一些属性,如下所示:
private var myListener: RtdbListener<LivestreamModel>?
我正在尝试调用此代码以遍历符合DatabaseObserver
协议的类的所有属性:
Mirror.reflectProperties(of: self) { (child: DatabaseObserver) in
child.removeObserver()
}
reflectProperties
函数的定义如下:
extension Mirror {
/// Returns all the children of the view that conform to the protocol specified by the closure.
static func reflectProperties<T>(
of target: Any,
matchingType type: T.Type = T.self,
using closure: (T) -> ()) {
let mirror = Mirror(reflecting: target)
for child in mirror.children {
(child.value as? T).map(closure)
}
}
}
通常,当我使用reflectProperties函数时,它会起作用。但是,由于某种原因,它没有检测到我的任何RtdbListener
属性。为什么是这样?是因为它是通用的吗?还是因为它是可选的,还是其他?
任何帮助将不胜感激!