Протокол только для класса как typealias для ассоциированного типа с ограничениями AnyObject - PullRequest
0 голосов
/ 25 мая 2018

В Swift 4.0 я мог написать что-то вроде этого

protocol ObserversHolder {

    ///Compiling Error in Swift 4.1
    ///note: possibly intended match 'StringManager.ObserverValue' (aka 'StringObserver') does not conform to 'AnyObject'
    ///note: protocol requires nested type 'ObserverValue'; do you want to add it?
    associatedtype ObserverValue: AnyObject

    var observers: [ObserverValue] {get set}
}

protocol StringObserver: class {
    func showString()
}

class StringManager: ObserversHolder {
    typealias ObserverValue = StringObserver

    var observers = [ObserverValue]()
}

Но в Swift 4.1 я получаю ошибку Type 'StringManager' does not conform to protocol 'ObserversHolder'.

Возможно ли это решить?

1 Ответ

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

Изменить AnyObject на Any

protocol ObserversHolder {

    ///Compiling Error in Swift 4.1
    ///note: possibly intended match 'StringManager.ObserverValue' (aka 'StringObserver') does not conform to 'AnyObject'
    ///note: protocol requires nested type 'ObserverValue'; do you want to add it?

    associatedtype ObserverValue: Any

    var observers: [ObserverValue] {get set}
}

protocol StringObserver: class {
    func showString()
}

class StringManager: ObserversHolder {
    typealias ObserverValue = StringObserver

    var observers = [ObserverValue]()
}
...