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

时间:2014-08-04 21:47:43

标签: uiview swift

我正在使用+ =对数组进行UIView,而且似乎不再有效。这条线

dropsFound += hitView

给出错误' [(UIView)]'与' UInt8'

不同

这是该方法的一部分。请注意,从Xcode 6 beta 5开始,hitTest现在返回一个可选项,因此有必要说

hitView?.superview

而不是

hitView.superview

在'中'言。

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
            }
        }

...省略方法的剩余部分

3 个答案:

答案 0 :(得分:21)

在上一版本中发生了变化。从beta 5发行说明:

  

数组上的+=运算符仅连接数组,不附加元素。这解决了使用AnyAnyObject和相关类型的歧义。

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

这样:

dropsFound.append(hitView)

或者,如果您真的想使用+=,您可能会这样做:

dropsFound += [hitView]

但那会有点傻。使用append,如错误消息所示。

答案 1 :(得分:0)

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

而不是

dropsFound += hitView

使用

dropsFound.append(hitView!)

再次注意,从XT 6 beta 5开始,从hitTest返回的UIView是可选的。

我确认这是带有以下游乐场示例的数组的一般问题。错误报告已发布到Apple。

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)

这可能值得拥有自己的问题,虽然我认为这只是另一个错误,所以我再次将它发布给Apple。

答案 2 :(得分:0)

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