【问题标题】:Can't make number negative不能使数字为负
【发布时间】:2018-02-18 03:42:02
【问题描述】:

我有这个swift 代码:

x = Float(arc4random_uniform(30))
y = Float(arc4random_uniform(30))
z = Float(arc4random_uniform(30))
coords.x = 0.00 - x
coords.y = 0.00 - y
coords.z = 0.00 - z

print("\(coords.x)       \(coords.y)         \(coords.z)      xyz")

由于某种原因,它总是将数字输出为正数,我也尝试过:

x = -Float(arc4random_uniform(30))
y = -Float(arc4random_uniform(30))
z = -Float(arc4random_uniform(30))
coords.x = x
coords.y = y
coords.z = z

还有……

x = -1 * Float(arc4random_uniform(30))
y = -1 * Float(arc4random_uniform(30))
z = -1 * Float(arc4random_uniform(30))
coords.x = x
coords.y = y
coords.z = z

...甚至还有一个我必须将随机数转换为 Int 以在 Float 转换中将其乘以 -1。

x = Float(-1*Int(arc4random_uniform(30)))
...

控制台输出总是这样的:

24.0       27.0         29.0      xyz

...没有负数。

我做错了什么?

编辑

coords 是我创建的 MyDict 类型:

class MyDict : NSDictionary {
    var x: Float = 0.0
    var y: Float = 0.0
    var z: Float = 0.0
}

这就是我打印值的方式:

print("\(coords.x)       \(coords.y)         \(coords.z)      xyz")

编辑

MyDict 现在是:

struct Coords {
    var x: Float = 0.0
    var y: Float = 0.0
    var z: Float = 0.0
}

编辑

上下文代码 - 这是在循环中发生的:

for nodeInnermost in nodeInner.childNodes {
                    if (nodeInnermost.name?.localizedStandardContains("ship"))! {
                        print(nodeInnermost.childNodes.first ?? "FIRST DOESNT EXIST")
                        var seqArray = [fadeOut, fadeIn]
                        var displacements = [] as Array<Coords>

                        var count = 0
                        var coords = Coords()

                        while count < 5 {
                            if childCount < 5 {
                                coords.x = Float(arc4random_uniform(30))
                                coords.y = Float(arc4random_uniform(30))
                                coords.z = Float(arc4random_uniform(30))
                            }
                            else if childCount > 4 && childCount < 10 {
                                coords.x = -Float(arc4random_uniform(30))
                                coords.y = Float(arc4random_uniform(30))
                                coords.z = Float(arc4random_uniform(30))
                            }
                            else if childCount > 9 && childCount < 15 {
                                coords.x = Float(arc4random_uniform(30))
                                coords.y = Float(arc4random_uniform(30))
                                coords.z = Float(arc4random_uniform(30))
                            }
                            else if childCount > 14 && childCount < 20 {
                                coords.x = Float(arc4random_uniform(30))
                                coords.y = Float(arc4random_uniform(30))
                                coords.z = Float(arc4random_uniform(30))
                            }
                            else if childCount > 19 && childCount < 25 {
                                coords.x = Float(arc4random_uniform(30))
                                coords.y = Float(arc4random_uniform(30))
                                coords.z = Float(arc4random_uniform(30))
                            }
                            else if childCount > 24 && childCount < 30 {
                                coords.x = Float(arc4random_uniform(30))
                                coords.y = Float(arc4random_uniform(30))
                                coords.z = Float(arc4random_uniform(30))
                            }
                            else if childCount > 29 && childCount < 35 {
                                coords.x = Float(arc4random_uniform(30))
                                coords.y = Float(arc4random_uniform(30))
                                coords.z = Float(arc4random_uniform(30))
                            }
                            else if childCount > 34 && childCount < 40 {
                                coords.x = -Float(arc4random_uniform(30))
                                coords.y = -Float(arc4random_uniform(30))
                                coords.z = -Float(arc4random_uniform(30))
                            }

                            //print("\(x)       \(y)         \(z)      xyz")
                            displacements.append(coords)

                            print("\(coords.x)       \(coords.y)         \(coords.z)      xyz")

                            let moveBy = SCNAction.move(by: SCNVector3Make(coords.x, coords.y, coords.z), duration: 0.5)

                            seqArray.append(fadeOut)
                            seqArray.append(moveBy)
                            seqArray.append(fadeIn)

                            count+=1
                        }

                        while count < 10 {
                            let moveBy = SCNAction.move(by: SCNVector3Make(displacements[9 - count].x, displacements[9 - count].y, displacements[9 - count].z), duration: 0.5)

                            seqArray.append(fadeOut)
                            seqArray.append(moveBy)
                            seqArray.append(fadeIn)

                            count+=1
                        }

                        let sequence = SCNAction.sequence(seqArray)
                        let animation = SCNAction.repeatForever(sequence)

                        nodeInnermost.childNodes.first?.runAction(animation)
                    }
                }

样本输出:

https://pastebin.com/Ak1pb6wP

【问题讨论】:

  • 什么是坐标?你是如何打印这些值的?
  • 编辑我的帖子
  • 好的,我编辑了它。
  • 为什么 MyDict 是一个类,为什么它扩展 NSDictionary。
  • 查看您的最新代码,为什么会出现负数?您的 while 循环仅在 count &lt; 5 时运行,并且在这种情况下您只能创建正数。

标签: swift random casting floating-point negative-number


【解决方案1】:

您的MyDict 扩展NSDictionary 没有意义,也不应该是class。一旦你把它设为正确的struct,你的代码就可以正常工作了。

struct MyDict {
    var x: Float = 0.0
    var y: Float = 0.0
    var z: Float = 0.0
}

var coords = MyDict()
coords.x = -Float(arc4random_uniform(30))
coords.y = -Float(arc4random_uniform(30))
coords.z = -Float(arc4random_uniform(30))

print("\(coords.x)       \(coords.y)         \(coords.z)      xyz")

输出:

-24.0 -28.0 -4.0 xyz

【讨论】:

  • 我仍然得到所有肯定...让我发布我所有的代码
  • 将我的答案中的代码复制并粘贴到操场上。您仍然使用我的确切代码得到正数吗?如果是这样,您使用的是哪个版本的 Xcode?​​span>
  • 让我看看...我以前从未使用过游乐场
  • 它在操场上工作我正在使用 Xcode 版本 9.3 beta (9Q98q)
  • nm 我明白了...您的代码有效...我在运行大多数符号之前忘记输入- 符号所以我没有看到任何负数...谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-20
  • 2023-02-23
  • 2013-03-03
  • 2015-12-20
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
相关资源
最近更新 更多