可选地将 AnyObject 转换为 Array 会出错

Optional casting of an AnyObject into Array gives an error

我正在尝试将一种 AnyObject 类型可选地强制转换为一个整数数组,如果它为 nil,将使用合并运算符存储一个空数组。代码:

import UIKit

let arrayAsAnyObject: AnyObject = [3, 4]

let arrayAsInts: [Int] = arrayAsAnyObject as? [Int] ?? [] // causes issue

这给了我以下问题:

Array types are now written with the brackets around the element type

如果我点击 "Fix-it" 按钮,它会将最后一行替换为

let arrayAsInts: [Int] = arrayAsAnyObject as? [[Int] ??[]

这显然不能解决这个问题。任何想法为什么会发生这种情况以及如何解决它?我正在使用 Xcode 6.3 beta 和 Swift 1.2.

这是 ??as? 之间的优先级问题,已在 6.3 beta 2 中解决。?? 在该版本中获得了优先级提升,因此您现在也可以做一些事情喜欢 optInt == otherOptInt ?? 0 并且默认绑定到右侧。

如果我尝试使用 Swift 的 1.2 beta 2 版本,它按原样工作,所以我建议升级(因为这是在新旧 beta 版本之间,而不是在 beta 和发布之间)而不是使用括号修复,这也可以解决它。