【问题标题】:Optional casting of an AnyObject into Array gives an error将 AnyObject 可选转换为 Array 会产生错误
【发布时间】:2015-03-12 19:57:53
【问题描述】:

我试图将 AnyObject 类型的可选转换为整数数组,如果它为 nil,则将使用合并运算符存储一个空数组。代码:

import UIKit

let arrayAsAnyObject: AnyObject = [3, 4]

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

这给了我以下问题:

数组类型现在用括号括住元素类型

如果我点击“修复”按钮,它会将最后一行替换为

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

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

【问题讨论】:

  • 尝试将??的左侧表达式用括号括起来,如下所示:(arrayAsAnyObject as? [Int]) ?? []
  • @findall 谢谢!有用。错误消息虽然有点令人困惑..
  • @findall 您应该将其发布为答案。

标签: arrays swift casting


【解决方案1】:

这是??as? 之间的优先级问题,已在 6.3 beta 2 中解决。?? 在该版本中获得了优先级提升,因此您现在还可以执行optInt == otherOptInt ?? 0 之类的操作并使用默认值绑定到右侧。

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

【讨论】:

    猜你喜欢
    • 2017-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-26
    • 2019-12-19
    相关资源
    最近更新 更多