swift - 仅类协议(protocol)作为具有 AnyObject 约束的关联类型的类型别名

标签 swift class generics protocols anyobject

在 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'

有可能解决这个问题吗?

最佳答案

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]()
}

关于swift - 仅类协议(protocol)作为具有 AnyObject 约束的关联类型的类型别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50533819/

相关文章:

ios - UIWebView.loading 返回 false

ios - 跟踪随机数

ios - 如何在XMPP中接受好友请求?

Java:从外部 .jar 获取类

ios - Swift 覆盖类函数

CSS - Genesis (Bootstrap) 列类

c# - 将元素添加到 IEnumerable<IPublishedContent>

swift - 是否可以在 Swift 中创建具有 Self 或关联类型要求的通用计算属性,如果可以,如何创建?

java - 泛型返回类型不起作用

xcode - 未调用 itemForActivityType