繁体   English   中英

如何在Swift中符合与associatedtype的协议?

[英]How do I conform to a protocol with associatedtype in Swift?

真是可惜,我真的不知道。 我有一个由其他人开发的项目,它正在使用TRON库。

我的问题很简单。 我如何符合具有associatedtype的协议。 我知道如何编写协议并遵守该协议,就像使用UITableViewDataSourceUITableViewDelegate

这是TRON协议的代码:

序列化器

import Foundation
import Alamofire

/// The type in which all data and upload response serializers must conform to in order to serialize a response.
public protocol ErrorHandlingDataResponseSerializerProtocol : DataResponseSerializerProtocol {
    /// The type of serialized object to be created by this `ErrorHandlingDataResponseSerializerProtocol`.
    associatedtype SerializedError

    /// A closure used by response handlers that takes a parsed result, request, response, data and error and returns a serialized error.
    var serializeError: (Alamofire.Result<SerializedObject>?,URLRequest?, HTTPURLResponse?, Data?, Error?) -> APIError<SerializedError> { get }
}

我正在尝试遵循这样的协议:

 class CustomErrorHandlingSerializer: ErrorHandlingDataResponseSerializerProtocol {

 }

我需要遵守这一点,因为这里有一个需要ErrorHandlingDataResponseSerializerProtocol的函数,

在此处输入图片说明

我尝试阅读图书馆的文档甚至他们的迁移指南。 原因可能是他们确实没有关于用法的简单示例,或者我只是不了解他们的文档。

  1. https://github.com/MLSDev/TRON/blob/master/Docs/4.0%20Migration%20Guide.md

  2. https://github.com/MLSDev/TRON

您需要指定serializeError属性将返回的对象类型。 有两种方法可以做到这一点:

  1. 定义类的SerializedError子类型,或:

  2. 使用typealiasSerializedError指向您的serializeError属性将提供的适当类型。

TRON作者在这里。

大多数时候,您不需要实现此协议,因为如果模型是JSONDecodable或Codable,则默认情况下会提供responseSerializer。 我假设您使用的是旧版本的TRON和SwiftyJSON,在这种情况下,您可能需要以这种方式调用请求:

let request : APIRequest<...,...> = tron.swiftyJSON.request("path")

如果你真的要实现自定义的响应串,你基本上需要实现两个协议- ErrorHandlingDataResponseSerializerProtocolDataResponseSerializerProtocol ,其中都包含一个associatedtype和变量。

您可以使用typealias,但是最好让Swift从变量签名中推断associatedtype。 您可以查看Response Serializers文档以供参考,我将其更新为最新语法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM