2017-12-07 18 views
0

これは本当に分かりません。私はこのプロジェクトを他の人が開発して使っています。TRON library.Swiftに関連するタイプのプロトコルに準拠させるにはどうすればよいですか?

私の質問はかなり簡単です。 associatedtypeのプロトコルに準拠させるにはどうすればいいですか?私はプロトコルを書く方法を知っていて、UITableViewDataSourceUITableViewDelegateのようにプロトコルに準拠しています。

ここでTRONのプロトコルのコードです:

Serializer.swift

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 { 

} 

私がする必要があるが、ここに関数があるので、それに従う、

enter image description here

私は図書館のドキュメントや移行ガイドを読んでみました。それは彼らが本当に使用法の簡単な例を持っていないか、私は彼らのドキュメントを理解していないかのどちらかです。

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

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

答えて

1

TRON author here。

ほとんどの場合、responseSerializerはデフォルトで提供されているため、このプロトコルを実装する必要はありません。モデルがJSONDecodableまたはCodableである場合です。あなたが本当にカスタム応答シリアライザを実装する場合

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

、あなたは基本的に2つを実装する必要があります:私はあなたがおそらくこの方法でリクエストを呼び出す必要があり、その場合には、あなたがSwiftyJSONでTRONの古いバージョンを使用していたと仮定しますプロトコル - ErrorHandlingDataResponseSerializerProtocolDataResponseSerializerProtocolであり、どちらも1つの関連タイプと1つの変数を含んでいます。

あなたはタイプアリアスを使用できますが、Swiftが関連するタイプを可変シグネチャから推測させる方が良いでしょう。参考までにResponse Serializers docを見ることができます。最新の構文に更新しました。

+0

超素晴らしい!どうもありがとうございます! :) 'xxx.swiftyJSON'が追加されました!良いこと私はあなたのレポにチケットを掲示しました<3 – Glenn

1

あなたはserializeErrorプロパティによって返されるオブジェクトのタイプを指定する必要があります。それを行うには2つの方法があります。あなたのserializeErrorプロパティが提供する適切な型にSerializedErrorを指すように

  • 使用typealias

    1. は、あなたのクラスのSerializedErrorサブタイプ、またはを定義します。

  • 関連する問題