我有一个带有类型别名的协议:
protocol Archivable { typealias DataType func save(data: DataType, withNewName newName: String) throws func load(fromFileName fileName: String) throws -> DataType }
以及符合该协议的类:
class Archiver: Archivable { typealias DataType = Int func save(data: DataType, withNewName newName: String) throws { //saving } func load(fromFileName fileName: String) throws -> DataType { //loading } }
我想Archivable
用作另一个类的属性:
class TestClass { let arciver: Archivable = Archiver() //error here: Protocol 'Archivable' can only be used as a generic constraint because it has Self or associated type requiments }
但是失败了
协议“可存档”只能用作通用约束,因为它具有“自我”或相关类型要求
我的目标是TestClass
只能看到Archiver
as Archiveable
,因此,如果我想更改保存/加载机制,我只需要创建一个新类,使其符合Archivable
in中的属性设置TestClass
,但是我不知道这是否可行,如果是这样,那么如何。
而且我想避免使用AnyObject
代替DataType。