无法在 Xcode 9.3 / Swift 4.1 中创建仅限于 类 的协议

Can't create protocol that is restricted to Classes in Xcode 9.3 / Swift 4.1

我正在尝试存储订阅者列表,这些订阅者是 ThemeListeners(主要是 UIViews 或 UIViewControllers),我需要弱存储它们,否则 UIViewControllers 永远不会被释放,我会发生内存泄漏。 我从

中获取了 WeakRef class

https://marcosantadev.com/swift-arrays-holding-elements-weak-references/

当我将它放入我的项目并尝试编译它时,我在 Xcode 9.3 的最后一行出现错误:

'WeakRef' requires that 'ThemeListener' be a class type

在 Xcode 9.2 中进行编译。

class WeakRef<T> where T:AnyObject
{
    private(set) weak var value : T?

    init( value:T?)
    {
        self.value = value
    }
}

protocol ThemeListener : AnyObject
{
}

typealias WeakRefThemeListener = WeakRef<ThemeListener>

有没有人对如何解决这个问题有任何建议。我在尝试使用 NSHashTable 时也遇到了同样的问题。

我觉得你的协议应该是这样的:

protocol ThemeListener : class
{}