Не могу создать протокол, который ограничен Классами в Xcode 9.3 / Swift 4.1 - PullRequest
0 голосов
/ 25 мая 2018

Я пытаюсь сохранить список подписчиков, которые являются ThemeListeners (в основном UIViews или UIViewControllers), и мне нужно, чтобы они хранились слабо, в противном случае UIViewControllers никогда не освобождаются, и я получаю утечки памяти.Я взял класс WeakRef из

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.

1 Ответ

0 голосов
/ 25 мая 2018

Я думаю, что ваш протокол должен быть таким:

protocol ThemeListener : class
{}
...