我正在尝试做一些相当简单的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的子类型”。我在这里做错了什么?
答案 0 :(得分:1)
问题是你不能隐式地将整数转换为浮点数。例如:
(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
答案 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)
}