尝试为HTTP请求快速实现Generics 3

时间:2017-01-30 11:40:57

标签: ios swift swift3 alamofire objectmapper

我正在尝试使用泛型来实现Base类中的请求/响应,以便派生类不必担心gory实现细节。

class mNoxHttpClient {

    var apiUrl      : String = ""
    var operation   : Int = -1
    var postData    : AnyObject

    var responseData : AnyClass

    init (apiUrl:String, operation:Int, postData:AnyObject) {
        self.apiUrl         = apiUrl
        self.operation      = operation
        self.postData       = postData
    }

    func doInBackground() {
        let fullURL = God.getFullURL(apiURL: self.apiUrl)
        Alamofire.request(fullURL, method: .post).responseObject { (response: DataResponse<AnyClass>) -> ()
            if (response != nil && response.result != nil && response.result.value != nil) {
                responseData = (response.result.value) 
            }
        }
    }

    func doAfterBackgroundCompletes() {
        assert(false, "This method must be overriden by the subclass")
    }

    func execute() {
        DispatchQueue.global(qos: .background).async {
            self.doInBackground()

            DispatchQueue.main.async {
                self.doAfterBackgroundCompletes()
            }
        }
    }
}

我需要让我的方法doInBackground在后​​台运行。在此之前,我试图让Alamofire发送请求并将响应返回给Mappable对象,以便我可以稍后在派生类中输入转换响应。

截至目前,这条线路给我一个错误 Alamofire.request(fullURL, method: .post).responseObject { _ in (response: DataResponse<Mappable>) -> ()

错误

  

无法将“DataRequest”类型的值转换为闭包结果类型“AnyClass”又名()

修改

我稍微修改了我的代码

Alamofire.request(fullURL).responseObject { (response: DataResponse<AnyClass>) in
                responseData = response.result.value
        }

现在我收到错误

  

可选类型'AnyClass?'的值无法解开,你的意思是用'!'要么 '?' ?

0 个答案:

没有答案