1

I am try to make a request for my object using Swift for Google app engine endpoint, but am getting an error and I have tried to correct it but it won't just get passed. I am new to iOS development anyway.

import UIKit

class MainController: UITabBarController {
    var service : GTLRMyApiService?
    var myvalue: String?

    override func viewDidLoad() {

        if service == nil {
            service = GTLRMyApiService()
            service?.retryEnabled = true

        }

        let query : GTLRMyApiQuery_GetRates = GTLRMyApiQuery_GetRates.query()

        var ticket = GTLRServiceTicket.initialize
        ticket = service!.executeQuery(query, completionHandler: { (ticket: GTLRServiceTicket,  object: AnyObject!, error: NSError) -> Void in
            print("Analytics: \(object) or \(error)")
            let resp : GTLRMyApi_MyRates = object as! GTLRMyApi_MyRates
            print("Black Market Dollar rate is: \(resp.value1)")
            self.myvalue = resp.value1

    })

}

It gives the error:

Cannot convert value of type '(GTLRServiceTicket, AnyObject!, NSError) -> Void' to expected argument type 'GTLRServiceCompletionHandler?'

ZygD
  • 22,092
  • 39
  • 79
  • 102

2 Answers2

0

I had this same problem and solved it by changing the unwrapping of the parameters in the closure:

ticket = service!.executeQuery(query, completionHandler: { (ticket: GTLRServiceTicket!,  object: AnyObject?, error: NSError?) -> Void in
        print("Analytics: \(object) or \(error)")
        let resp : GTLRMyApi_MyRates = object as! GTLRMyApi_MyRates
        print("Black Market Dollar rate is: \(resp.value1)")
        self.myvalue = resp.value1

})

I'm no Swift expert, but I guess this is required to match what the Objective-C implementation of the function is expecting. Xcode does not make this clear.

zazzy78
  • 172
  • 7
0

I too faced same issue but by removing unneeded optionals it will works fine.

  self.service.executeQuery(batchQuery) { (ticket:GTLRServiceTicket, object:Any?, error:Error?) in
        let data: GTLRBatchResult = object as! GTLRBatchResult
        var messages = data.successes
        for datata in messages!{

            var mussage : GTLRGmail_Message = datata.value as! GTLRGmail_Message
            print(mussage.identifier)

        }
    }