我使用SQLite的cocoapod这个项目像这样在Swift中遍历可选数组?
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数据库中的怪物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] }
}
}
看到我更换0
与范围i
?我这样做是因为怪物有不止一个动作,如果我把它留在0
我的应用程序将只显示那些学习这个动作作为他们的第一个动作的怪物。为了更好地解释,我目前的代码并没有查看怪物是否知道这一举动,而只是通过怪物是否知道作为其第一步。
在上面的代码中,我增加了范围认为它可以解决我的问题,但我的应用程序会崩溃,因为有些怪物只在他们的指数1
举动,所以任何上述指标0
将错误
崩溃fatal error: Index out of range
所以回顾一下,我需要遍历整个数组而不是第一个索引,而不会崩溃。我怎样才能做到这一点?
请您详细解释一下这个答案吗? – baxu