[英]Error after converting objective-c code to swift 3.0.2 Google Drive Rest API
问题很简单。我有一个在Objective-C中工作正常的代码,但我需要相同的代码才能在swift中工作。通过下面的代码我将文件名为“photo.png”的文件从Documents文件夹上传到我的Google Drive在iPhone上。(我删除了设置Documents目录文件夹的部分以节省一些空间)这是原始代码:
-(void)uploadPhoto{
metadata.parents = ids;
GTLRUploadParameters *uploadParameters;
uploadParameters = [GTLRUploadParameters uploadParametersWithData:photoData MIMEType:@"image/png"];
uploadParameters.shouldUploadWithSingleRequest = TRUE;
GTLRDriveQuery_FilesCreate *query = [GTLRDriveQuery_FilesCreate queryWithObject:metadata
uploadParameters:uploadParameters];
query.fields = @"id";
[self.service executeQuery:query completionHandler:^(GTLRServiceTicket *ticket,
GTLRDrive_File *file,
NSError *error) {
if (error == nil) {
NSLog(@"File photo ID %@", file.identifier);
} else {
NSLog(@"An error occurred: %@", error);
}
}];
}
其中大部分都来自谷歌开发者。目标 - 它的工作正常! 以下是快速进入的内容:
func uploadPhotos()
{
var ids : NSArray!
metadata.parents = ident as! [String]?
var uploadParameters = GTLRUploadParameters(data:photoData! as Data,mimeType:"image/png")
uploadParameters.shouldUploadWithSingleRequest = true
var query :GTLRDriveQuery_FilesCreate
query = GTLRDriveQuery_FilesCreate.query(withObject: metadata, uploadParameters: uploadParameters)
query.fields = "id"
let vc:DriveListTableViewController
self.service.executeQuery(query,completionHandler :{(ticket: GTLRServiceTicket!,
file: GTLRDrive_File!,
error: Error!)-> Void in
if error == nil {
print("File photo ID \(file.identifier)")
}
else {
print("An error occurred: \(error)")
}
})
}
我得到的错误与self.service.exequteQuery一致
swift:314:59: Cannot convert value of type '(GTLRServiceTicket!, GTLRDrive_File!, Error!) -> Void' to expected argument type 'GTLRServiceCompletionHandler?'
请帮我解决一下错误! 尝试了不同的变种!
请参考此SO线程 。 您可以尝试更改闭包中的参数的展开。 也许这需要匹配函数的Objective-C实现所期望的。
您还可以查看以下附加参考:
Swift 2到Swift 3:无法将'(Data?,NSError?) - > Void'类型的值转换为预期的参数类型'GTMSessionFetcherCompletionHandler?'
根据SE-0112 ,
NSError
现在桥接到Swift作为Error
协议。 事实上,如果你⌥+点击GTMSessionFetcherCompletionHandler
在雨燕,你会看到它究竟是如何桥接:typealias GTMSessionFetcherCompletionHandler =(数据?,错误?) - >无效
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.