Swift通用和具体对象类型

时间:2019-03-09 13:56:11

标签: swift generics

我是泛型新手,不确定我要做的事情是否可行。总的来说,我想在我的项目中尝试创建一种从API接收JSON对象的通用方法->将它们转换为DTO->对象->将它们保存到DB->检索它们->转换为DTO并显示等等。 MVVP和Clean Architecture。

以下是我到目前为止所得到的或者至少我认为与我的问题相关的部分。问题是Translator在我希望将其作为InspectionTranslator的地方创建了一个对象Translator,以便在需要时调用正确的toObject。当然会调用Translator方法。

使用typealias是否有可能? 也许我所有的类都需要能够返回assosiatedtype,并且要使用关联类型来调用方法,以便可以将其用于调用父类中的正确方法? 如果术语不正确,请原谅我的问题,请原谅。

protocol DataTypeProcotol {
    associatedtype DTO : Codable 
}

protocol TranslatorDataProtocol {
    associatedtype DataType:DataTypeProcotol
}

protocol TranslationLayerProtocol : TranslatorDataProtocol {
    func createDTOsFromJsonData<T:Decodable>(_ data: Data, type:T.Type) ->  T?
}

protocol TranslatorProtocol: TranslatorDataProtocol {
    func toObject(from:DataType.DTO, with context: NSManagedObjectContext)->DataType
}

class Translator<DataType>:TranslatorProtocol where DataType: DataTypeProcotol {
    func toObject(from: DataType.DTO, with context: NSManagedObjectContext) -> DataType {
        preconditionFailure("Needs to be implemented by child classes")
    }
}

class TranslationLayer<DataType> : TranslationLayerProtocol where DataType: DataTypeProcotol {
    var translator = Translator<DataType>() ....

class InspectionTranslator:Translator<Inspection> {
    override func toObject(from dto: InspectionDTO, with context: NSManagedObjectContext) -> Inspection {

0 个答案:

没有答案