0

我正在尝试做一些相当简单的 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 的子类型”。我在这里做错了什么?

4

2 回答 2

1

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

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

这是无效的,因为iis an Int, i + 1is an Intbut pip.frame.size.widthis a CGFloat。这适用于像 Obj-C 这样的语言,其中i会被隐式转换为CGFloat,但 Swift 没有隐式转换,所以我们必须显式转换。

最简单的解决方法是转换iCGFloat第一个:

let floatI = CGFloat(i)

接着

let x = tray2.frame.size.width - (floatI + 1) * pip.frame.size.width - (floatI + 1) * 2
于 2014-07-23T13:10:14.453 回答
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)
}
于 2014-07-23T02:46:58.113 回答