'[(UIView)]' 与在 Xcode 6 beta 5 中使用 += 时的 'UInt8' 不同。改用追加方法?



我使用+=一个UIView数组,这似乎不再工作。行

dropsFound += hitView

给出一个错误'[(UIView)]'不等同于'UInt8'

这是方法的一部分。注意,从Xcode 6 beta 5开始,hitTest现在返回一个可选值,所以有必要输入

hitView?.superview
不是

hitView.superview

在if语句中。

func removeCompletedRows() -> Bool {
    println(__FUNCTION__)
    var dropsToRemove = [UIView]()
    for var y = gameView.bounds.size.height - DROP_SIZE.height / 2; y > 0; y -= DROP_SIZE.height {
        var rowIsComplete = true
        var dropsFound = [UIView]()
        for var x = DROP_SIZE.width / 2; x <= gameView.bounds.size.width - DROP_SIZE.width / 2; x += DROP_SIZE.width {
            let hitView = gameView.hitTest(CGPointMake(x, y), withEvent: nil)
            if hitView?.superview === gameView {
                dropsFound += hitView
            } else {
                rowIsComplete = false
                break
            }
        }

…方法的剩余部分

这在上一个版本中有所改变。来自beta 5发行说明:

数组上的+=操作符只能连接数组,不能添加元素。这解决了Any, AnyObject和相关类型的歧义。

因此,如果+=的左侧是一个数组,那么右侧现在也必须是。

:

dropsFound.append(hitView)

或者如果你真的想使用+=,你可以这样做:

dropsFound += [hitView]

但是那就有点傻了。按照错误提示使用append

解决方案似乎是需要对数组使用append方法而不是+=。我不知道原因,所以另一个答案可能更合适。

不是

dropsFound += hitView
使用

dropsFound.append(hitView!)

再次,注意从hitTest返回的UIView在Xcode 6 beta 5中是可选的。

我用下面的playground示例验证了这是数组的普遍问题。已经向苹果公司发布了一个bug报告。

var s: [String] = []
// s += "hello"  // error: '[String]' is not identical to 'UInt8'
s.append("hello")
s

如果您试图追加元组,或者其他类型,则会有额外的复杂性。

// line below no longer works in Xcode 6 beta 5
// and you will also get an error trying to append the tuple directly
// which is probably a bug
// possibleFlipsArray += (x, y)
// possibleFlipsArray.append((x, y))
let tempTuple = (x, y)
possibleFlipsArray.append(tempTuple)

这可能值得一个单独的问题,虽然我认为这只是另一个错误,所以我再次把它发布给苹果。

在数组dropsFound += hitView中添加对象,以这种方式,在上一个版本中被删除。您可以使用以下语法添加数组中的元素:dropsFound += [hitView]或dropsFound.append(hitView)

最新更新