我可以像使用函数一样复制 class
Can i make a duplicate class as i can with functions
所以我有这段代码,我试图为请求创建一个任务处理程序。但在某些情况下,请求没有得到响应模型,因此我不希望它处理任何数据。很难解释,但代码如下所示:
class UserTask<T: Codable>: ExecuteProtocol {
let userType: UserRequests
init(userType: UserRequests) {
self.userType = userType
}
var request: URLRequest {
return userType.build
}
public func run(completion: @escaping ((Response<T, NAError>) ->())) {
executeRequest(request: request) { (response) in
switch response {
case .success(let data):
completion(NADecoder<T>.decode(data: data).model)
break
case .failure(let error):
completion(.failure(error))
break
}
}
}
}
class UserTask: ExecuteProtocol {
let userType: UserRequests
init(userType: UserRequests) {
self.userType = userType
}
var request: URLRequest {
return userType.build
}
public func run(completion: @escaping ((Response<Any?, NAError>) ->())) {
executeRequest(request: request) { (response) in
switch response {
case .success(let data):
completion(.success(nil))
break
case .failure(let error):
completion(.failure(error))
break
}
}
}
}
这当然是说 Invalid redeclaration of 'UserTask'
但是我可以顺利地做到这一点吗?我试过使 Codable 可选然后打开它。但是因为我想将它的类型保留在 Decodable 目的中,它似乎不起作用。
有什么建议吗?
无需为相同的功能创建多个 classes。您只需对单个 class 进行一些更改即可支持您的两个用例。
不是将 generic <T>
添加到 class UserTask
,而是将其添加到方法 run(completion:)
,即
class UserTask: ExecuteProtocol {
let userType: UserRequests
init(userType: UserRequests) {
self.userType = userType
}
var request: URLRequest {
return userType.build
}
public func run<T: Codable>(type: T.Type, completion: @escaping ((Response<T?, NAError>) ->())) {
//your code here...
}
}
这样称呼它,
task.run(type: YourType.self) { (response) in
//add your code here...
}
所以我有这段代码,我试图为请求创建一个任务处理程序。但在某些情况下,请求没有得到响应模型,因此我不希望它处理任何数据。很难解释,但代码如下所示:
class UserTask<T: Codable>: ExecuteProtocol {
let userType: UserRequests
init(userType: UserRequests) {
self.userType = userType
}
var request: URLRequest {
return userType.build
}
public func run(completion: @escaping ((Response<T, NAError>) ->())) {
executeRequest(request: request) { (response) in
switch response {
case .success(let data):
completion(NADecoder<T>.decode(data: data).model)
break
case .failure(let error):
completion(.failure(error))
break
}
}
}
}
class UserTask: ExecuteProtocol {
let userType: UserRequests
init(userType: UserRequests) {
self.userType = userType
}
var request: URLRequest {
return userType.build
}
public func run(completion: @escaping ((Response<Any?, NAError>) ->())) {
executeRequest(request: request) { (response) in
switch response {
case .success(let data):
completion(.success(nil))
break
case .failure(let error):
completion(.failure(error))
break
}
}
}
}
这当然是说 Invalid redeclaration of 'UserTask'
但是我可以顺利地做到这一点吗?我试过使 Codable 可选然后打开它。但是因为我想将它的类型保留在 Decodable 目的中,它似乎不起作用。
有什么建议吗?
无需为相同的功能创建多个 classes。您只需对单个 class 进行一些更改即可支持您的两个用例。
不是将 generic <T>
添加到 class UserTask
,而是将其添加到方法 run(completion:)
,即
class UserTask: ExecuteProtocol {
let userType: UserRequests
init(userType: UserRequests) {
self.userType = userType
}
var request: URLRequest {
return userType.build
}
public func run<T: Codable>(type: T.Type, completion: @escaping ((Response<T?, NAError>) ->())) {
//your code here...
}
}
这样称呼它,
task.run(type: YourType.self) { (response) in
//add your code here...
}