Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 无法转换预期参数类型GTLServiceCompletionHandler的值_Ios_Google App Engine_Swift3_Swift2.3 - Fatal编程技术网

Ios 无法转换预期参数类型GTLServiceCompletionHandler的值

Ios 无法转换预期参数类型GTLServiceCompletionHandler的值,ios,google-app-engine,swift3,swift2.3,Ios,Google App Engine,Swift3,Swift2.3,我使用谷歌云AppEngine在Swift 2.3.0中编写了我的应用程序。现在我升级到xCode8.0,需要将我的应用程序转换为Swift 3.0。以下代码在Swift 2.3中是正确的。但在Swift 3.0中是错误的。任何帮助都将不胜感激! 问题: 无法将类型为“(GTLServiceTicket!,GTLObject!,NSError!)->Void”的值转换为预期的参数类型“GTLServiceCompletionHandler!” func sendRequest() -> G

我使用谷歌云AppEngine在Swift 2.3.0中编写了我的应用程序。现在我升级到xCode8.0,需要将我的应用程序转换为Swift 3.0。以下代码在Swift 2.3中是正确的。但在Swift 3.0中是错误的。任何帮助都将不胜感激! 问题: 无法将类型为“(GTLServiceTicket!,GTLObject!,NSError!)->Void”的值转换为预期的参数类型“GTLServiceCompletionHandler!”

func sendRequest() -> GTLServiceTicket? {
    if self.query != nil && shouldSend {
        self.ticket = appService.executeQuery(query!, completionHandler: {
            (ticket: GTLServiceTicket!, object: AnyObject!, error: NSError!) -> Void in
            if error != nil {
                for handler in self.onFailure {
                    handler(ticket, error)
                }
            } else {
                for handler in self.onSuccess {
                    handler(ticket, object)
                }
            }
        })
    }
    return ticket
}

如果您跳到#Swift 3.0#Xcode 8,则需要对代码进行一些更改

要记住的事情:

  • NS已从大多数位置移除 例如
    n错误
    已变成
    错误

  • 现在,objective-c中的
    id
    参数将在swift3中具有类型
    Any

回到问题上来, 以前,如果objective-c代码中的参数没有可空性属性(如nonnull或nullable),Swift将使用!使其非可选(强制展开)。现在它转换成什么?使它们成为可选的。这就是为什么你会出错。完成处理程序将成为:

func sendRequest()->GTLServiceTicket?{
如果self.query!=nil&&shouldSend{
self.ticket=appService.executeQuery(查询!),completionHandler:{
(票证:GTLServiceTicket?,对象:Any?,错误:error?->Void in
如果错误!=nil{
对于self.onFailure中的处理程序{
处理程序(票据、错误)
}
}否则{
对于self.onSuccess中的处理程序{
处理程序(票据、对象)
}
}
})
}
回程票

}

您需要对代码进行一些更改,特别是当您跳转到#Swift 3.0#Xcode 8时

要记住的事情:

  • NS已从大多数位置移除 例如
    n错误
    已变成
    错误

  • 现在,objective-c中的
    id
    参数将在swift3中具有类型
    Any

回到问题上来, 以前,如果objective-c代码中的参数没有可空性属性(如nonnull或nullable),Swift将使用!使其非可选(强制展开)。现在它转换成什么?使它们成为可选的。这就是为什么你会出错。完成处理程序将成为:

func sendRequest()->GTLServiceTicket?{
如果self.query!=nil&&shouldSend{
self.ticket=appService.executeQuery(查询!),completionHandler:{
(票证:GTLServiceTicket?,对象:Any?,错误:error?->Void in
如果错误!=nil{
对于self.onFailure中的处理程序{
处理程序(票据、错误)
}
}否则{
对于self.onSuccess中的处理程序{
处理程序(票据、对象)
}
}
})
}
回程票
}

谢谢您的回答! 我试过了。以下两个代码正在工作。所有需要添加“作为可选的'NSError'”和“作为可选的'AnyObject'”

一,

func sendRequest()->GTLServiceTicket?{
如果self.query!=nil&&shouldSend{
self.ticket=appService.executeQuery(查询!),completionHandler:{
(票证:GTLServiceTicket?,对象:Any?,错误:error?->Void in
如果错误!=nil{
对于self.onFailure中的处理程序{
处理程序(票证,错误为可选)
}
}否则{
对于self.onSuccess中的处理程序{
处理程序(票证、对象作为可选)
}
}
})
}
回程票
}
二,

func sendRequest()->GTLServiceTicket?{
如果self.query!=nil&&shouldSend{
self.ticket=appService.executeQuery(查询!){ticket,对象,中的错误
如果错误!=nil{
对于self.onFailure中的处理程序{
处理程序(票证,错误为可选)
}
}否则{
对于self.onSuccess中的处理程序{
处理程序(票证、对象作为可选)
}
}
}
}
回程票
}
谢谢您的回答!
我试过了。以下两个代码正在工作。所有需要添加“作为可选的'NSError'”和“作为可选的'AnyObject'”

一,

func sendRequest()->GTLServiceTicket?{
如果self.query!=nil&&shouldSend{
self.ticket=appService.executeQuery(查询!),completionHandler:{
(票证:GTLServiceTicket?,对象:Any?,错误:error?->Void in
如果错误!=nil{
对于self.onFailure中的处理程序{
处理程序(票证,错误为可选)
}
}否则{
对于self.onSuccess中的处理程序{
处理程序(票证、对象作为可选)
}
}
})
}
回程票
}
二,

func sendRequest()->GTLServiceTicket?{
如果self.query!=nil&&shouldSend{
self.ticket=appService.executeQuery(查询!){ticket,对象,中的错误
如果错误!=nil{
对于self.onFailure中的处理程序{
处理程序(票证,错误为可选)
}
}否则{
对于self.onSuccess中的处理程序{
处理程序(票证、对象作为可选)
}
}
}
}
回程票
}
func sendRequest() -> GTLServiceTicket? {
    if self.query != nil && shouldSend {
        self.ticket = appService.executeQuery(query!, completionHandler: {
            (ticket: GTLServiceTicket?, object: Any?, error: Error?) -> Void in
            if error != nil {
                for handler in self.onFailure {
                    handler(ticket, error as Optional<NSError>)
                }
            } else {
                for handler in self.onSuccess {
                    handler(ticket, object as Optional<AnyObject>)
                }
            }
        })
    }
    return ticket
}
func sendRequest() -> GTLServiceTicket? {
    if self.query != nil && shouldSend {
        self.ticket = appService.executeQuery(query!) { ticket, object, error in
            if error != nil {
                for handler in self.onFailure {
                    handler(ticket, error as Optional<NSError>)
                }
            } else {
                for handler in self.onSuccess {
                    handler(ticket, object as Optional<AnyObject>)
                }
            }
        }
    }
    return ticket
}