' + ='不能应用于两个[AnyObject]操作数

时间:2015-06-10 17:00:31

标签: xcode swift autolayout

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

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]操作数"

此代码有什么问题?

4 个答案:

答案 0 :(得分:4)

这不是因为操作员。 这是因为你正在传入一个你实际上应该传递NSLayoutFormatOptions枚举类型的Int。

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

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

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

NSLayoutFormatOptions(rawValue: 0)

0可以在Objective-C中使用,但是您需要在Swift中使用实际的枚举值。 在许多情况下,Swift错误仍然常常会产生误导,就像这个错误一样。

希望这有帮助。

答案 1 :(得分:0)

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

guess = int(guess)
number = int(number)
if guess[0] == number[0]:
    ## other (correct)code goes here

答案 2 :(得分:0)

以下是答案:

Xcode列出了错误的错误,这就是导致所有这些混乱的原因。使用Int of 0作为我的格式选项显然不会让编译器满意,所以我必须使用NSLayoutFormatOptions(0)

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

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

答案 3 :(得分:0)

在我的情况下,使用.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])

这似乎很好,因为我想要"没有选择"值。