iOS QuickStart for Google Sheets API在转换为Swift 3后失败
Google Sheets API的iOS快速启动: 在Xcode 8中,该代码可用于Swift 2,但无法从GTLRSheets_ValueRange中获取图纸值 重现问题:iOS QuickStart for Google Sheets API在转换为Swift 3后失败,ios,swift3,xcode8,google-sheets-api,Ios,Swift3,Xcode8,Google Sheets Api,Google Sheets API的iOS快速启动: 在Xcode 8中,该代码可用于Swift 2,但无法从GTLRSheets_ValueRange中获取图纸值 重现问题: 按照说明创建项目、pod并复制粘贴代码 在项目构建设置中打开“使用传统Swift语言版本”-设置“是”,并在菜单“编辑/转换”中选择“到当前Swift语法…” 验证应用程序是否正常工作 在项目生成设置中关闭“使用传统Swift语言版本”-设置“否”,并在菜单“编辑/转换”中选择“到当前Swift语法…” 应用转换更改
"result.values"
但是,以下说明提供了预期值:
result.range
result.majorDimension
我可以看到结果中的值(在内部结构中)
同样的例子在安卓系统中也很有效
UPD:添加了带有错误和监视变量的图像:
到目前为止,Swift 2和Swift 3版本在该代码字段“值”中的唯一区别是从Objective-C从“NSArray*值”转换为“[[AnyObject]]?”(在Swift 2中)和“[[Any]]?”(在Swift 3中):
UPD-2:指令中的错误点。似乎与以下操作有关。我测试了早些时候报告的bug——它们不会被复制
Swift._arrayForceCast <A, B> (Swift.Array<A>) -> Swift.Array<B>
Swift.\u arrayForceCast
也许这个博客会有所帮助。它讨论了处理错误的可能方法。Swift 2引入了一个新的错误处理模型,函数可以抛出错误,调用方可以捕获错误。这将替换桥接的Objective-C类中的n错误。基于此,只要操作可能失败,就可以使用Result
转换原始JSON值似乎可以解决此错误
guard let rows = result.jsonValue(forKey: "values") as? [[String]] else
{
// Shouldn't happen, but handle error case just in case
}
// Use rows: [[String]]
非常感谢。框架看起来不错。我读了你提到的那篇文章,但是我没有找到解决这个问题的方法。我也尝试使用谷歌的例子,我得到了同样的错误。你明白了吗?不,我回到Swift 2来做这个项目。我在谷歌的跟踪器上注册了一个勾号,并在苹果的开发者论坛上发布了这个问题-到目前为止没有反馈。对我来说很有用。非常感谢你!