私はPINCacheを使用してアプリケーションにキャッシュを追加しています。私は、キャッシュシステムによってエンコード/デコードするデリゲートメソッドが呼び出される状況にあります。 これらのメソッドは汎用ですが、汎用値は明示的にCodable
に適合しません。彼らは代理人であるため、署名を変更して汎用タイプをCodable
に一致させることはできません。このコードではSwift 4 Codable&generics
func modelForKey<T : SimpleModel>(_ cacheKey: String?, context: Any?, completion: @escaping (T?, NSError?) ->()) {
guard let cacheKey = cacheKey, let data = cache.object(forKey: cacheKey) as? Data, T.self is Codable else {
completion(nil, nil)
return
}
let decoder = JSONDecoder()
do {
let model: T = try decoder.decode(T.self, from: data)
completion(model, nil)
} catch {
completion(nil, nil)
}
}
、私は次のエラーを持っている:
In argument type
T.Type
,T
does not conform to expected typeDecodable
は、どのように私は、一般的な値を受け入れるように、私のdecoder
を強制することができますか?
guard let cacheKey = ... as? Data, T.self is Decodable else {
を使用しようと
CustomProtocol: Codable, SimpleModel
を作成するようにしてください 'も同様ですか?ありがとう;) –