奇怪的 Swift 3 问题与最新的 Amazon AWS Mobile 示例代码
Weird Swift 3 issue with latest Amazon AWS Mobile sample code
在 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)
问题是这样的,我收到警告
事实上,尝试将其转换为同一类型似乎毫无意义。
但是如果你只是删除演员表
AWSIdentityManager.defaultIdentityManager().resumeSession(completionHandler:
{(result: AnyObject?, error: NSError?) -> Void in
print("Result: \(result) \n Error:\(error)")
}
isInitialized = true
那根本行不通,你会遇到各种奇怪的语法错误
1) 怎么会有演员表?
2) 我怎样才能去掉演员表,或者正确地写它,这样就没有相同的演员表,因此没有警告?
3) 我想一个解决方案就是移除力(所以,as
而不是 as!
),但我真的不明白为什么你必须在那里施放方块。
注意 - 在同一行代码中,亚马逊包含评论 "If you get an EXC_BAD_ACCESS here in iOS Simulator, then do Simulator -> Reset Content and Settings..., This will clear bad auth tokens stored by other apps with the same bundle ID." 我要问的问题这里与那个完全无关。
在最后一个可能是正确语法的示例中,缺少右括号。
你替换了
} 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: isInitialized
不应该是 在 完成块吗?
在 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)
问题是这样的,我收到警告
事实上,尝试将其转换为同一类型似乎毫无意义。
但是如果你只是删除演员表
AWSIdentityManager.defaultIdentityManager().resumeSession(completionHandler:
{(result: AnyObject?, error: NSError?) -> Void in
print("Result: \(result) \n Error:\(error)")
}
isInitialized = true
那根本行不通,你会遇到各种奇怪的语法错误
1) 怎么会有演员表?
2) 我怎样才能去掉演员表,或者正确地写它,这样就没有相同的演员表,因此没有警告?
3) 我想一个解决方案就是移除力(所以,as
而不是 as!
),但我真的不明白为什么你必须在那里施放方块。
注意 - 在同一行代码中,亚马逊包含评论 "If you get an EXC_BAD_ACCESS here in iOS Simulator, then do Simulator -> Reset Content and Settings..., This will clear bad auth tokens stored by other apps with the same bundle ID." 我要问的问题这里与那个完全无关。
在最后一个可能是正确语法的示例中,缺少右括号。
你替换了
} 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: isInitialized
不应该是 在 完成块吗?