我可以像使用函数一样创建一个重复的类吗

沃兰

所以我有这个代码,我试图为请求制作一个任务处理程序。但在某些情况下,请求没有得到模型响应,因此我不希望它处理任何数据。很难解释,但代码如下所示:

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 设为可选,然后展开它。但是因为我想将它的类型保留在可解码的目的中,它似乎不起作用。

有什么建议么?

PGD​​ev

无需为相同的功能创建多个类。您只需要对单个类进行一些更改即可支持您的两个用例。

不是将泛型 添加<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...
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何创建一个可以像 module.subsection.function() 一样使用的模块?

我可以像C#的Action一样使用C ++函数指针吗?

Laravel LiveWire 2:我们是否必须创建一个新类,或者我们可以像传统控制器一样做

一个像dict一样的python类

有一个像Linux cut一样工作的Go函数吗?

python中的函数可以像类一样表现吗?

是否可以像 Sass 一样在 JSS 中创建一个变量

我可以像参数一样引用子类吗?

我想为图像创建一个像循环一样自动滚动的 CollectionView

我可以像getter一样返回函数吗?

Scala:我可以像类型方法一样编写函数吗?

“类”是一个命名空间,但像“类型”一样使用

Kubernetes可以像Docker Compose一样使用吗?

可以像功能类型一样使用char *吗?

我可以像使用常规上传一样使用httprequest自动发布文件吗?

我可以像使用php一样使用nodejs更改超级全局变量吗?

我可以像使用JavaScript一样使用CSS吗?

我可以和如何像使用软件一样从 .dat 文件中提取数据吗?

我可以像流程一样使用可选的打字稿吗?

我可以像输入一样使用内联样式访问元素吗?

我可以像12.04上的13.04一样使用DE吗

我可以以某种方式创建一个看起来像 .toUpperCase() 的函数吗?

我可以像在JS中一样访问类的构造函数变量吗?

如何创建一个像模板一样的函数,它将一堆代码作为参数?

我可以编写“只要可能”就可以像c ++模板函数一样工作的Julia方法吗?

我可以创建一个可以解包的类吗?

是否可以创建一个像符号链接一样工作的 .htaccess 重写/重定向规则?

真奇怪。它是一个函数,但可以和对象一样使用

像我使用MATLAB一样在Python Spyder中打开一个函数