【发布时间】:2017-04-25 18:09:47
【问题描述】:
我在这个项目中使用 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 中的怪物 ID 值与 SQLite 数据库中的值匹配。我使用此代码这样做
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] }
}
}
看到我在哪里将0 替换为i 范围?我这样做是因为怪物有不止一个动作,如果我把它留在0 我的应用程序只会显示学习该动作的怪物作为他们的第一个动作。为了更好地解释,我当前的代码不查看怪物是否知道这一步,它只查看怪物是否知道这一步作为它的第一步。
在上面的代码中,我增加了范围,认为它可以解决我的问题,但是我的应用程序会崩溃,因为一些怪物只有 1 在他们的索引中移动,所以任何高于索引 0 的东西都会因错误而崩溃
致命错误:索引超出范围
所以回顾一下,我需要遍历整个数组而不是只遍历第一个索引,而不会崩溃。我怎样才能做到这一点?
【问题讨论】: