iOS QuickStart for Google Sheets API在转换为Swift 3后失败

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语法…” 应用转换更改

Google Sheets API的iOS快速启动:

在Xcode 8中,该代码可用于Swift 2,但无法从GTLRSheets_ValueRange中获取图纸值

重现问题:

  • 按照说明创建项目、pod并复制粘贴代码

  • 在项目构建设置中打开“使用传统Swift语言版本”-设置“是”,并在菜单“编辑/转换”中选择“到当前Swift语法…”

  • 验证应用程序是否正常工作

  • 在项目生成设置中关闭“使用传统Swift语言版本”-设置“否”,并在菜单“编辑/转换”中选择“到当前Swift语法…”

  • 应用转换更改

  • 验证应用程序是否启动、授权google帐户并调用方法“displayResultWithTicket”

  • 预期结果:

    下面的说明使用结果对象中的值填充变量“rows”

    “让行=结果。值!”

    实际结果:

    下面的指令抛出错误

    "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来做这个项目。我在谷歌的跟踪器上注册了一个勾号,并在苹果的开发者论坛上发布了这个问题-到目前为止没有反馈。对我来说很有用。非常感谢你!