当前位置:  开发笔记 > IOS > 正文

使用协议以typealias作为属性

如何解决《使用协议以typealias作为属性》经验,为你挑选了0个好方法。

我有一个带有类型别名的协议:

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只能看到Archiveras Archiveable,因此,如果我想更改保存/加载机制,我只需要创建一个新类,使其符合Archivablein中的属性设置TestClass,但是我不知道这是否可行,如果是这样,那么如何。

而且我想避免使用AnyObject代替DataType。

推荐阅读
女女的家_747
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有