我正在尝试做一些相当简单的 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 的子类型”。我在这里做错了什么?
最佳答案
问题是您无法将整数隐式转换为 float 。例如:
(i + 1) * pip.frame.size.width
这是无效的,因为 i
是一个 Int
,i + 1
是一个 Int
但 pip.frame.size.width
是一个 CGFloat
。这适用于 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
关于swift - NSNumber 不是 UInt8 的子类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24900279/