使用最新的Amazon AWS Mobile示例代码

时间:2016-11-15 17:14:35

标签: swift3 aws-sdk

根据aws.amazon.com/mobile/的当前示例代码,有许多代码项目他们没有很好地更新到Swift 3(考虑到他们的资源,这非常奇怪)。

当你来到AWSMobileClient.swift时,有一行代码如下:

 if (!isInitialized) {
 AWSIdentityManager.defaultIdentityManager().resumeSession(completionHandler:
   {(result: AnyObject?, error: NSError?) -> Void in
    print("Result: \(result) \n Error:\(error)")
    } as! (Any?, Error?) -> Void)
 isInitialized = true
 }

在任何跑步中都会崩溃。

幸运的是,我能够通过更改像这样的参数来修复它

  AWSIdentityManager.defaultIdentityManager().resumeSession(completionHandler:
        {(result: Any?, error: Error?) -> Void in
            print("Result: \(result) \n Error:\(error)")
        } as! (Any?, Error?) -> Void)

问题是这样,我收到了警告

enter image description here

事实上,尝试将其转换为相同类型似乎毫无意义。

但如果你只是删除演员

AWSIdentityManager.defaultIdentityManager().resumeSession(completionHandler:
       {(result: AnyObject?, error: NSError?) -> Void in
        print("Result: \(result) \n Error:\(error)")
        }
     isInitialized = true

根本不起作用,你会得到各种奇怪的语法错误

enter image description here

1)为什么还有演员呢?

2)我怎样才能摆脱演员阵容,或者正确地写出来,因此没有相同的演员,因此没有警告?

3)我猜一个解决方案就是去除力(所以,as而不是as!),但我真的不明白为什么你必须在那里施放。< / p>

注意 - 在相同的代码行中,亚马逊包含注释&#34;如果您在iOS模拟器中获得了EXC_BAD_ACCESS,那么请执行模拟器 - &gt;重置内容和设置...,这将清除由具有相同捆绑ID的其他应用程序存储的错误身份验证令牌。&#34; 我在这里询问的问题与此完全无关。

1 个答案:

答案 0 :(得分:4)

在最后一个可能是正确语法的例子中,缺少右括号。

您已取代

} as (Any?, Error?) -> Void)

}而不是预期})

我删除了一些非必要的内容,以便更清楚:

WSIdentityManager.defaultIdentityManager().resumeSession(completionHandler: { (result, error) in
    print("Result: \(result) \n Error:\(error)")
})
isInitialized = true
使用尾随闭包语法

或更短:

WSIdentityManager.defaultIdentityManager().resumeSession() { (result, error) in
    print("Result: \(result) \n Error:\(error)")
}
isInitialized = true

不需要类型注释(在完成块中)。他们可能弊大于利。

PS:<{1}}是否应该>

完成块?