如何引用通用Alamofire DataResponse值

时间:2017-10-26 16:34:28

标签: swift alamofire

我想编写一个可以接受任何Alamofire DataResponse值的方法。例如,我可能会传递DataResponse<Any>DataResponse<String>。然而,我无法找到让它工作的方法。例如,如果我尝试像这样使用“DataResonse”

static func isTimeout(response: DataResponse) -> Bool {
    if let error = response.result.error {
        if error._code == NSURLErrorTimedOut {
            return true
        }
    }
    return false
}

我收到编译错误:

Reference to generic type 'DataResponse' requires arguments in <...>
Insert <Any>.

但是,如果我将参数类型更改为DataResponse<Any>,那么当我有DataResponse<String>时,它将不起作用。我尝试将DataResponse<String>传递给函数时得到的编译错误是:

Cannot convert value of type 'DataResponse<String>' to expected argument type 'DataResponse<Any>'

我也试过了DataResponse<AnyObject>并得到了与上面相同的错误 和DataResponse<Value>并收到此错误:

Use of undeclared type 'Value'

有关如何执行此操作的任何想法,所以我不必仅为略有不同的参数类型复制函数吗?

1 个答案:

答案 0 :(得分:5)

您忘记推断通用类型。试试这个:

static func isTimeout<T>(response: DataResponse<T>) -> Bool {