我的应用程序基础结构中有两个主要部分。
NetworkingManager
NetworkRequest
我的目标是让请求保留其Codable
Type
,以便在完成网络连接后Manager
层可以使用
decode<T>(_ type: T.Type, from data: Data) throws -> T where T : Decodable
所以我的NetworkRequest
看起来像这样
class NetworkRequest {
var objectClass:Codable.Type
}
让我说我有一个符合Person
的{{1}}类
Codable
现在我需要像这样将类型分配给请求(以一种丑陋的方式来说明问题)
class Person : Codable {
var name:String?
}
现在,当我希望let request = NetworkingRequest()
request.objectClass = Person.self
解码响应时,我会像这样使用它:
NetworkingManager
问题是当我这样做时出现此错误:
无法使用类型为(Decodable.Type,来自:数据)的参数列表调用解码。预期类型为(T.Type,来自:数据)的参数列表。
任何帮助将不胜感激
答案 0 :(得分:1)
尝试这样的事情:
class NetworkRequest<T: Codable> {
var objectClass: T.Type
init(objectClass: T.Type) {
self.objectClass = objectClass
}
}
答案 1 :(得分:1)
将NetworkRequest
标记为通用<T: Codeable>
可以满足您的需求吗?
class NetworkRequest<T: Codable> {
var objectClass: T.Type
}
然后像这样初始化和调用
let request = NetworkRequest<Person>()
request.objectClass = Person.self
然后打电话
try JSONDecoder().decode(request.objectClass, from: dataFromService)
答案 2 :(得分:1)
function deletePlaylist(songid) {
var currentModal = $(this);
currentModal.find('.btn-ok').click(function() {
console.log(songid);
});
}