NSNumber不是UInt8的子类型

时间:2014-07-23 01:04:34

标签: swift sprite-kit skshapenode

我正在尝试做一些相当简单的SKShapeNode数学来设置形状节点的位置。它看起来像这样:

    for var i = 0; i < 6; i++ {
        var pip: Pip = pips[i]

        // set position
        let x: CGFloat = tray2.frame.size.width - (i + 1) * pip.frame.size.width - (i + 1) * 2
        let y: CGFloat = tray2.frame.size.height - pip.frame.size.height - 1
        pip.position = CGPointMake(x, y)

        tray2.addChild(pip)
    }

但是,在'let x ...'行中,会产生错误:“NSNumber不是UInt8的子类型”。我在这里做错了什么?

2 个答案:

答案 0 :(得分:1)

问题是你不能隐式地将整数转换为浮点数。例如:

(i + 1) * pip.frame.size.width

这是无效的,因为iInti + 1Intpip.frame.size.widthCGFloat。这可以在像Obj-C这样的语言中使用i隐式转换为CGFloat但Swift没有隐式转换,所以我们必须明确地转换。

最简单的解决方法是先将i转换为CGFloat

let floatI = CGFloat(i)

然后

let x = tray2.frame.size.width - (floatI + 1) * pip.frame.size.width - (floatI + 1) * 2

答案 1 :(得分:0)

将表达式包装在CGFloat初始化程序中以解决编译器错误

for var i = 0; i < 6; i++ {
    var pip: Pip = pips[i]

    // set position
    let x: CGFloat = CGFloat(tray2.frame.size.width - (i + 1) * pip.frame.size.width - (i + 1) * 2)
    let y: CGFloat = CGFloat(tray2.frame.size.height - pip.frame.size.height - 1)
    pip.position = CGPointMake(x, y)

    tray2.addChild(pip)
}