Xcode '+=';不能应用于两个[AnyObject]操作数
我使用以下代码尝试创建要添加到视图的约束数组:Xcode '+=';不能应用于两个[AnyObject]操作数,xcode,swift,autolayout,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: vi
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]操作数”
这段代码怎么了?我想您可以尝试将constraintsWithVisualFormat的结果保存到一个临时常量中,然后分配它
let newConstraints = NSLayoutConstraint.constraintsWithVisualFormat("|-margin-[button]-margin-|", options: 0, metrics: metrics, views: views)
constraints += newConstraints
这不是因为接线员。 这是因为您正在传递一个Int,实际上应该传递
NSLayoutFormatOptions
enum-type
如果为options
参数传入一个NSLayoutFormatOptions
enum,错误将消失:
constraints += NSLayoutConstraint.constraintsWithVisualFormat("|-margin-[button]-margin-|", options: .AlignAllLeft, metrics: metrics, views: views)
或者您也可以使用要使用的Int值初始化NSLayoutFormatOptions
,如下所示:
NSLayoutFormatOptions(rawValue: 0)
0将在Objective-C中工作,但您需要在Swift中使用实际的枚举值。
在许多情况下,Swift错误仍然经常误导人,比如这一次
希望这能有所帮助。以下是答案:
Xcode将错误的东西列为错误,这就是导致所有这些混乱的原因。对格式选项使用Int值0显然不能让编译器满意,因此我不得不使用NSLayoutFormatOptions(0)
这样,完成的工作代码如下所示:
var constraints: [AnyObject] = []
constraints += NSLayoutConstraint.constraintsWithVisualFormat("|-margin-[button]-margin-|", options: NSLayoutFormatOptions(0), metrics: metrics, views: views)
在我的例子中,使用
.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])
这看起来不错,因为我需要“无选项”值。您使用的是什么版本的Xcode?现在是一个关键问题——两天前发布的Xcode 7在这篇评论中有了很大的变化。Xcode 6.3.2就是我所关注的。我只是得出了同样的结论。Xcode编译器让我绕圈运行,告诉我错误的错误。。。是 啊希望Xcode能很快提供更多有用的错误解释:)结果是格式选项枚举导致了错误。Xcode只是没有很好地说明错误是什么。。。。