ios - 从数组加载数据时遇到问题

标签 ios arrays swift

在 swift 中,我的数组如下:

var storedLevels = [
    1:[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 6, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 7, 0,
       2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],

    2:[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
]

我需要能够将数组 storedLevels[1] 加载到变量中, 然后循环遍历变量中的值。

此时我已经一切正常,但是我必须在 storedValues[X] 中显式将 1 设置为 X,然后循环该代码。

这是我正在使用的功能:

func loadLevel(level: Float) {
        var x: Int = 0
        var y: Int = 0

        let blocks = storedLevels[1]

        for var i: CGFloat = 0; i <= (gBlockCountY); i += 1 {
            y = Int(i)
            for var i: CGFloat = 0; i <= (gBlockCountX-1); i += 1 {
                x = Int(i)

                var blockCountToTimes: CGFloat = CGFloat(y)-1
                if blockCountToTimes < 0 {
                    blockCountToTimes = 0
                }
                let blockNumber = (gBlockCountX * blockCountToTimes) + CGFloat(x)

                if let block = blocks?[Int(blockNumber)] {
                    addBlockToGrid(CGFloat(block), x: CGFloat(x), y: CGFloat(y))
                } else {
                    addBlockToGrid(1, x: CGFloat(x), y: CGFloat(y))
                }
            }
        }
    }

如何让 letblocks =storedLevels[1] 使用传递给函数的值 (level: Float) 来替换 1?

最佳答案

storedLevels(Int, [Int]) 类型的字典,而不是数组。我不知道为什么你需要有 key (因此使它成为一本字典)。这也很好:

var storedLevels = [ [0, 0, 0, ...], [1, 1, 1, ...] ]
let blocks = storedLevels[Int(level) - 1]

现在回到你的字典:你的键是Int类型,但levelFloat类型。能有1.5级吗?如果您想使用字典范例,请将 level 转换为 Int:

let blocks = storedLevels[Int(level)]

关于ios - 从数组加载数据时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32193769/

相关文章:

如果应用程序终止,则不会收到 iOS FCM 推送通知

ios - 这个 run_on_main() 宏有什么问题吗?

java - 将对象添加到数组时动态增加数组长度

c - 如何将二维数组传递给C中的函数?

javascript - 从数组 A 获取数组 B 的正确算法应该是什么

ios - 如何在不使用 Swift 3 淹没我的 API 的情况下读取 HTTP 请求

ios - 使用日期格式化程序

ios - 转换在 drawRect 中绘制的内容

ios - 如何保护 iOS 应用程序中的 awsconfiguration.json 数据详细信息?

ios - 在 Swift 中使用扩展来实现委托(delegate)函数