如何编写定义变量的通用协议,该变量也接受指定Type的子类?

时间:2017-04-10 13:34:11

标签: swift protocols subclass

好的,我已经让这个协议在Realm的帮助下覆盖了对象缓存。在协议中,我定义cache: Object?哪个类型由Realm库定义。

protocol PersistantCaching {
  var cache: Object?   { get set }
}

然后我在课程ClientDetails中使用此协议。

class Client: PersistantCaching {
  var cache: Object?
}

但是Object过于笼统。所以在我的例子中,我创建了Object子类

class LocalClient: Object {
  dynamic var name = ""
}

现在,如果我将课程Client更改为支持LocalClient,就像这样

class Client: PersistantCaching {
  var cache: LocalClient?
}

我收到错误,类型'客户'不符合协议'PersistantCaching'

如何编写定义变量的通用协议,该变量也接受指定Type的子类?

1 个答案:

答案 0 :(得分:2)

使用associatedtype

protocol PersistantCaching {
    associatedtype CacheObject: Object
    var cache: CacheObject?   { get set }
}

(我假设您希望cache始终是Object的子类。)