【问题标题】:'+=' cannot be applied to two [AnyObject] operands'+=' 不能应用于两个 [AnyObject] 操作数
【发布时间】:2015-06-10 17:00:30
【问题描述】:

我有以下代码来尝试创建一个约束数组以添加到视图中:

let views = ["button": button]
let metrics = ["margin": 16]

var constraints: [AnyObject] = []
constraints += NSLayoutConstraint.constraintsWithVisualFormat("|-margin-[button]-margin-|", options: 0, metrics: metrics, views: views)

根据我对 Swift 数组的了解,我应该能够将它们 '+=' 一起加入两者,但我得到一个错误:

“二元运算符'+='不能应用于两个[AnyObject]操作数”

这段代码有什么问题?

【问题讨论】:

  • 您使用的是什么版本的 Xcode?现在是一个关键问题 - 在两天前发布的 Xcode 7 中发生了很大变化。
  • 我正在使用 Xcode 6.3.2。

标签: xcode swift autolayout


【解决方案1】:

不是因为运营商。 这是因为你传入了一个 Int,而实际上你应该传入 NSLayoutFormatOptions 枚举类型。

如果您为options 参数传入NSLayoutFormatOptions 枚举之一,错误将消失:

constraints += NSLayoutConstraint.constraintsWithVisualFormat("|-margin-[button]-margin-|", options: .AlignAllLeft, metrics: metrics, views: views)

或者您也可以使用您要使用的 Int 值初始化 NSLayoutFormatOptions,如下所示:

NSLayoutFormatOptions(rawValue: 0)

0 可以在 Objective-C 中使用,但您需要在 Swift 中使用实际的枚举值。 在许多情况下,Swift 错误仍然经常具有误导性,比如这个。

希望这会有所帮助。

【讨论】:

  • 我刚刚得出了同样的结论。 Xcode 编译器让我跑来跑去告诉我错误的错误...?
  • 是的.. 希望 Xcode 很快会提供更多有用的错误解释 :)
【解决方案2】:

我认为您可以尝试将 constraintsWithVisualFormat 的结果保存到一个临时常量中,然后分配它。

let newConstraints = NSLayoutConstraint.constraintsWithVisualFormat("|-margin-[button]-margin-|", options: 0, metrics: metrics, views: views)
constraints += newConstraints

【讨论】:

  • 原来是格式选项枚举导致了错误。 Xcode 只是没有很好地说明错误是什么......
【解决方案3】:

答案如下:

Xcode 将错误的内容列为错误,这就是导致所有这些混乱的原因。为我的格式选项使用 Int 0 显然不会让编译器满意,因此我不得不使用 NSLayoutFormatOptions(0)

这样,完成的工作代码是这样的:

var constraints: [AnyObject] = []
constraints += NSLayoutConstraint.constraintsWithVisualFormat("|-margin-[button]-margin-|", options: NSLayoutFormatOptions(0), metrics: metrics, views: views)

【讨论】:

    【解决方案4】:

    在我的情况下,使用 .AlignAllLeft 而不是 NSLayoutFormatOptions(rawValue: 0) 并不是导致错误的原因。约束数组应该是静态类型的。

    // BEFORE:
    // var viewConstraints: [AnyObject] = [AnyObject]()
    // AFTER:  
    var viewConstraints: [NSLayoutConstraint] = [NSLayoutConstraint]()
    let views = NSDictionary(object: customView, forKey: "customView")
    
    viewConstraints += NSLayoutConstraint.constraintsWithVisualFormat("H:|[customView]|",
        options: NSLayoutFormatOptions(rawValue: 0),
        metrics: nil,
        views: views as! [String : AnyObject])
    
    // "Convert to Swift 2.0" Xcode option suggests syntax:
    viewConstraints += NSLayoutConstraint.constraintsWithVisualFormat("V:|[customView]|",
        options: [],
        metrics: nil,
        views: views as! [String : AnyObject])
    

    这看起来不错,因为我想要“没有选项”的价值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-10
      • 1970-01-01
      • 2015-09-01
      • 2017-11-22
      • 2018-06-23
      • 2023-03-10
      • 2016-03-11
      • 1970-01-01
      相关资源
      最近更新 更多