[英]How do I conform to a protocol with associatedtype in Swift?
真是可惜,我真的不知道。 我有一个由其他人开发的项目,它正在使用TRON库。
我的问题很简单。 我如何符合具有associatedtype
的协议。 我知道如何编写协议并遵守该协议,就像使用UITableViewDataSource
和UITableViewDelegate
。
这是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
的函数,
我尝试阅读图书馆的文档甚至他们的迁移指南。 原因可能是他们确实没有关于用法的简单示例,或者我只是不了解他们的文档。
您需要指定serializeError
属性将返回的对象类型。 有两种方法可以做到这一点:
定义类的SerializedError
子类型,或:
使用typealias
将SerializedError
指向您的serializeError
属性将提供的适当类型。
TRON作者在这里。
大多数时候,您不需要实现此协议,因为如果模型是JSONDecodable或Codable,则默认情况下会提供responseSerializer。 我假设您使用的是旧版本的TRON和SwiftyJSON,在这种情况下,您可能需要以这种方式调用请求:
let request : APIRequest<...,...> = tron.swiftyJSON.request("path")
如果你真的要实现自定义的响应串,你基本上需要实现两个协议- ErrorHandlingDataResponseSerializerProtocol
和DataResponseSerializerProtocol
,其中都包含一个associatedtype和变量。
您可以使用typealias,但是最好让Swift从变量签名中推断associatedtype。 您可以查看Response Serializers文档以供参考,我将其更新为最新语法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.