【问题标题】:Swift: Random number arrays inside images and variables with a for loopSwift:带有for循环的图像和变量中的随机数数组
【发布时间】:2015-01-01 12:10:11
【问题描述】:

我正在创建一个游戏,根据选择的“滑动”次数(比如说 3 次),屏幕上会一个一个地显示 3 种不同的模式。我是正在开发第一个模式。

所以我有这个:

if (swipes.no_of_swipes) == 3 {
        swipeArray = Array<UInt32>(count: 3, repeatedValue: 0)
        for i in 0 ..< 3 {
            swipeArray[i] = arc4random_uniform(84)}
    }

据我所知,这段代码创建了一个包含三个 UInt 的数组可以通过 swipeArray[0]、swipeArray[1] 和 swipeArray[2] 访问它。我的第一个问题是 这个 swipeArray 会保持多久?直到关闭视图? 当用户输了时,我应该有一个“刷新按钮”吗?如果是,我应该怎么做?

然后我有一个物业观察员。您会注意到 for 循环,我使用它来保持代码简洁。我知道我可以在这里的某个地方做类似x++ 这样的事情,这样它就会通过每一个。

var playBegin: Bool = false{
    didSet {
        if playBegin == true {
            println("\(playBegin)")
            var swipes = Menu()
            if (swipes.no_of_swipes) == 3 {
                for i in 0 ..< 3 {
                    patternRoom.image = UIImage(named: "pattern\(swipeArray[x])")
                    //rest of code
                }
            }
}

图案图像来自一组 84 张图像,命名为 pattern7pattern56。我的第二个问题是,我如何编写 for 循环来遍历每个 swipeArray[x]

提前谢谢你,

【问题讨论】:

  • 你在找for i in 0 ..&lt; 3 { patternRoom.image = UIImage(named: "pattern\(swipeArray[i])") //rest of code }
  • @MidhunMP 抱歉,我不明白你的意思?
  • 回答你的第二个问题。上面的代码迭代了 swipeArray 3 次
  • @MidhunMP 是的,我知道,但是滑动数组中的 x 每次都需要更改。
  • 你所说的 x 是什么意思?价值 ?还是数组的长度?

标签: ios arrays xcode swift for-loop


【解决方案1】:

这个 swipeArray 会保持多久?

这有点太开放了。它会保持不变,直到您为它分配一个新值,无论是来自同一段代码还是不同的部分。只有您可以通过查看您的代码知道何时会发生。

由于您表示有兴趣保持代码简洁,这里有一些代码提示。

您可能会考虑这样编写您的第一个 sn-p 循环:

swipeArray = (0..<swipes.no_of_swipes).map { _ in
    arc4random_uniform(84)
}

这结合了创建新数组和填充值。顺便说一句,如果你没有意识到,不能保证这个数组不会包含两次相同的值。

swipeArray 的类型设为[Int] 而不是[UInt32] 也可能更好,并立即将arc4random 的结果转换为Int

Int(arc4random_uniform(84))

否则UInt32s 可能会很痛苦。

对于您的第二个 for 循环,您可以这样做:

for i in swipeArray {
    patternRoom.image = UIImage(named: "pattern\(i)")
    // rest of code
}

在编写 Swift 时,通常(但不总是),当您发现自己在使用 array[x] 时,会有更好的表达方式。

【讨论】:

  • 感谢您抽出宝贵时间来做这件事。当我输入 Int(arc4random_uniform(84)) 时,我得到一个错误,即我无法“找到接受所提供参数的 init 的重载”。谢谢
  • 很可能是因为您没有将swipeArray 的类型更改为[Int] 而不是[UInt32] - 即问题不是将arc4random 的结果转换为@ 987654335@,它是将Ints 的数组分配给UInt32s 的数组类型。
  • 嗯,好的。那么我应该如何编辑这个swipeArray = Array&lt;UInt32&gt;(count: 3, repeatedValue: 0) 谢谢
  • 你没有。删除该行。它所做的只是将一个新数组(填充三个零)分配给swipeArray,您将在下一行用另一个数组替换它。该行没有声明swipeArray 变量(即var swipeArray)。它是成员变量还是全局变量?找到那个部分,然后改变它。
  • 1) 打开一个新的游乐场 2) 将其粘贴到其中:let no_of_swipes = 3; var swipeArray: [Int]; swipeArray = (0..&lt;no_of_swipes).map { _ in Int(arc4random_uniform(84)) }; println(swipeArray) 3) 看看它是否有效 4) 找出您的代码有何不同以及为什么会破坏它。
猜你喜欢
  • 1970-01-01
  • 2012-10-29
  • 2018-01-20
  • 1970-01-01
  • 2017-09-03
  • 2013-12-24
  • 1970-01-01
  • 2013-10-28
  • 1970-01-01
相关资源
最近更新 更多