使用Google API Client for REST Swift SDK时,GTLRDrive_File缺失时间属性
解决GTLRDrive_File无法获取modifiedTime和createdTime的问题
这个问题我之前也踩过坑!其实原因很简单:Google Drive API默认不会返回所有文件属性,你看到的modifiedTime和createdTime属于需要主动指定才会返回的字段,不是SDK的问题,也不是属性可选的问题。
为什么会出现这种情况?
Google Drive API为了优化响应性能,默认只返回一组基础字段(比如你看到的id、name、mimeType、kind),像时间戳这类额外属性,必须在请求中明确声明要获取它们,API才会把这些数据返回给你。
解决方案:在请求中指定fields参数
你需要在构建Drive API请求的时候,设置fields属性,把需要的字段列出来。举几个常见场景的例子:
1. 获取单个文件的详情(Files.Get)
let query = GTLRDriveQuery_FilesGet.query(withFileId: "你的文件ID") // 指定需要返回的字段,把createdTime和modifiedTime加进去 query.fields = "createdTime,modifiedTime,name,mimeType,id,kind" // 执行请求 service.executeQuery(query) { (ticket, file, error) in if let file = file as? GTLRDrive_File { // 现在就能正常访问file.createdTime和file.modifiedTime了 print("创建时间:\(file.createdTime)") print("修改时间:\(file.modifiedTime)") } }
2. 获取文件列表(Files.List)
如果是批量获取文件列表,fields的格式要嵌套一层files:
let query = GTLRDriveQuery_FilesList.query() query.fields = "files(createdTime,modifiedTime,name,mimeType,id,kind),nextPageToken" service.executeQuery(query) { (ticket, response, error) in if let listResponse = response as? GTLRDrive_FileList, let files = listResponse.files { for file in files { print("\(file.name) - 创建时间:\(file.createdTime)") } } }
验证效果
设置好fields参数后,重新运行代码再用po file打印对象,就能看到createdTime和modifiedTime出现在输出里了。
另外,如果你需要更多字段,可以直接把对应字段名加到fields里,用逗号分隔即可。
内容的提问来源于stack exchange,提问作者brandonscript
相关产品推荐
相关产品推荐

