我有以下代码尝试创建一个约束数组以添加到视图中:
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]操作数"
此代码有什么问题?
答案 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])
这似乎很好,因为我想要"没有选择"值。