将objective-c代码转换为swift 3.0.2 Google Drive Rest API后出错

时间:2017-04-10 06:18:14

标签: ios swift swift3 google-drive-api

问题很简单。我有一个在Objective-C中运行良好的代码,但我需要相同的代码才能在swift中工作。通过下面的代码我将名为“photo.png”的文件上传到我的Google云端硬盘来自iPhone上的Documents文件夹。(我删除了设置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);
        }

    }];

}

我从大多数形式开发Google开发者。目标 - 它的工作正常! 以下是快速进入的内容:

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?'

请帮我解决一下错误!尝试了不同的变种!

1 个答案:

答案 0 :(得分:0)

请参阅此SO thread。您可以尝试更改闭包中的参数的展开。也许这需要与函数的Objective-C实现相匹配。

您还可以查看以下附加参考资料: