swift - NSNumber 不是 UInt8 的子类型

标签 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 的子类型”。我在这里做错了什么?

最佳答案

问题是您无法将整数隐式转换为 float 。例如:

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

这是无效的,因为 i 是一个 Inti + 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/

相关文章:

xcode - 如何在 Xcode 中打开优化?

Swift - Sprite Kit 漂浮的气泡粘在角落

swift - 当 isDynamic 为 false 时,SpriteKit Sprite 会轻微移动

ios - SKShapeNode 不绘制 UIBezierPath

sprite-kit - SpriteKit 将 SKShapeNode 放置在场景中心

ios - 节点多于我应有的

swift - 尝试用 Swift 进行 Catch

json - 从 TableView 中的 JSON 数据下载可重复使用的单元格或错误的异步图像

xcode - 如何在 PickerView 中搜索对象

swift - tvOS 背景音乐和播放/暂停按钮