镜像未检测到符合协议的通用类的属性

时间:2019-08-30 19:11:19

标签: ios swift

我有一个协议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属性。为什么是这样?是因为它是通用的吗?还是因为它是可选的,还是其他?

任何帮助将不胜感激!

0 个答案:

没有答案