ios - 由于 GTLRServiceCompletionHandler,无法为 Google Drive REST API 运行 service.executeQuery()

标签 ios swift google-drive-api

我一直在尝试弄清楚如何通过我正在编程的 Swift 应用程序将文件从 iOS 上传到 Google Drive。我对 Swift 和 Objective-C 非常陌生,但出于我正在开发的应用程序的目的,它必须在 Swift 中完成。我按照 Google Drive API 教程在我的应用程序中进行了设置,并且我能够成功登录并列出我的 Google Drive 文件夹中的文件,如 this tutorial 中所述。 .

自从开始工作以来,我一直在尝试将文件从 iOS 上传到 Google 云端硬盘。由于 Google Drive API 文档上没有 Swift 代码向我展示如何执行此操作,因此我尝试严格遵循此 Objective-C 代码 listed here用于基本上传。

我当前的代码如下:

let fileData: Data? = FileManager.default.contents(atPath: "files/photo.jpg")
let metadata = GTLRDrive_File.init()
metadata.name = "photo.jpg"
let uploadParameters = GTLRUploadParameters(data: fileData!, mimeType: "image/jpeg")
uploadParameters.shouldUploadWithSingleRequest = true
let query = GTLRDriveQuery_FilesCreate.query(withObject: metadata, uploadParameters: uploadParameters)
query.fields = "id"
self.service.executeQuery(query, completionHandler: (GTLRServiceTicket, Any?, Error?) -> Void) {
  return {
    (ticket: GTLRServiceTicket, object: Any?, error: Error?) -> Void in
  }
}

我发现了另一篇 SO 帖子,试图通过查看类型别名来解决与此有点类似的问题。当我提取 GTLRServiceCompletionHandler 的类型别名时,我得到的是:

public typealias GTLRServiceCompletionHandler = (GTLRServiceTicket, Any?, Error?) -> Swift.Void

这是显示的 service.executeQuery 的默认函数签名:

service.executeQuery(query: GTLRQueryProtocol, completionHandler: GTLRServiceCompletionHandler?)

在运行代码之前我遇到的当前编译器错误表明,completionHandler 的参数标签与任何可用的重载方法不匹配。我已经在这方面工作了很长时间(而且对 Swift 不太熟悉),所以我不完全确定我能做些什么来让它继续工作。任何帮助将不胜感激。

最佳答案

您可能误解了 completionHandler 的目的,或者对此类调用的语法有困难。您提供一个将在查询完成时执行的闭包。它接受三个类型为 (GTLRServiceTicket, Any?, Error?) 的参数,并且不返回任何内容 (Void)。

您还可以使用尾随闭包语法,这意味着您不需要标记 completionHandler 参数。

把它们放在一起,你会得到类似的东西

self.service.executeQuery(query) { (ticket:GTLRServiceTicket, object:Any?, error:Error?) in
    // Put your completion code here
}

关于ios - 由于 GTLRServiceCompletionHandler,无法为 Google Drive REST API 运行 service.executeQuery(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45334952/

相关文章:

ios - 仅从 UIView 的 3 个边绘制阴影

ios - CMS,iOS 应用程序后端

iphone - iOS Google Drive sdk 集成和权限

ruby - 使用 ruby​​ 上的 google_drive gem 在 google 电子表格中设置单元格或行背景颜色

python - 谷歌驱动器 : How do I transfer ownership using the Python SDK?

ios - 删除核心数据中的对象,无法匹配 Swift 数组元素类型

ios - 核心数据 : Automatically Trim String Properties

ios - 我如何使用一组 swift 子类类型?

ios - UISearchController - Objective C 到 Swift 问题

ios - 为什么 UIView.animate 可以使用交互式 Controller 转换,而 UIViewPropertyAnimator 不能?