繁体   English   中英

遍历Swift中的可选数组?

[英]Iterate through an optional array in Swift?

我正在像这样将cocoapod SQLite用于该项目

import SQLite

var db = try! Connection()
var id: Expression<Int>!
var identifier: Expression<String>!

有了它,我正在从SQLite数据库中读取动作列表。 每个怪物都有可以学习的动作。 有些怪物可以比其他怪物学习更多的动作。

var monster: Monster!
var monArray = [Monster]()
var dataSource: DataSource!

为了获得怪物的移动ID,我使用此代码。 这使我能够抓住阵列中的第一步。 更改0将使我获得第二,第三步。

monster.moves![0]["move_id"] as! Int

现在,我正在使用SQLite数据库,因为我需要将plist中的Monster ID值与SQLite数据库中的Monster ID值进行匹配。 我用这段代码来做

override func viewWillAppear(_ animated: Bool) {
    let movesArray = Array(try! db.prepare(Table("moves").where(identifier == moves.name!.lowercased())))
    for user in movesArray {
            monArray = dataSource.mons.filter{ $0.moves![0]["move_id"] as! Int == user[id] }
    }
}

一切正常, 直到我尝试增加索引范围。

for user in movesArray {
     for i in 0...6 {
         monArray = dataSource.mons.filter{ $0.moves![i]["move_id"] as! Int == user[id] }
     }
}

看看我在哪里用范围i替换0 之所以这样做,是因为既然怪物有多个动作,那么如果我将其保留为0我的应用程序将仅显示学习了该动作的怪物作为其第一步。 为了更好地说明,我当前的代码不会查看怪物是否知道此举,而只会查看怪物是否知道该举动是其第一步

在上面的代码中,我增加了范围,认为它可以解决我的问题,但是我的应用程序将崩溃,因为某些怪物的索引中只有1动作,因此索引0以上的任何内容都会因错误而崩溃

致命错误:索引超出范围

因此,回顾一下,我需要遍历整个数组,而不仅仅是第一个索引,而不会崩溃。 我该如何实现?

没有所有的故事,以防万一你只是询问如何遍历数组喜欢这里

for item in array as type {
   ...
}

您的问题似乎更合乎逻辑。 如果我理解您所说的话,那么每个怪物将至少有1个举动,但不能保证有更多举动。 因此,您需要考虑这一点。

如果不是所有的怪物都有那么多的移动,那么像您这样固定的限制肯定会引起问题,因为数组的大小不会总是那么大。

我会做类似的事情:

let monsterMoveCount = user.moves.count
for i in 0...monsterMoveCount
   // Do whatever logic here

希望这会有所帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM