Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xcode '+=';不能应用于两个[AnyObject]操作数_Xcode_Swift_Autolayout - Fatal编程技术网

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只是没有很好地说明错误是什么。。。。