Ios 无法在viewDidLoad()之外使用sqlite(swift)命令
我正在使用stephencelis的SQLite框架 我的问题是这些命令只能在viewDidLoad()中使用。 但是我必须在viewDidLoad之外的函数中使用定义的变量(例如var carlist) 我的逻辑问题在哪里 我的代码被截断了:Ios 无法在viewDidLoad()之外使用sqlite(swift)命令,ios,sqlite,swift,Ios,Sqlite,Swift,我正在使用stephencelis的SQLite框架 我的问题是这些命令只能在viewDidLoad()中使用。 但是我必须在viewDidLoad之外的函数中使用定义的变量(例如var carlist) 我的逻辑问题在哪里 我的代码被截断了: override func viewDidLoad() { super.viewDidLoad() let db = Database("/Users/**/Desktop/NEW/car/car.sqlite")
override func viewDidLoad() {
super.viewDidLoad()
let db = Database("/Users/**/Desktop/NEW/car/car.sqlite")
let cars = db["cars"]
let car_id = Expression<Int64>("car_id")
let car_model = Expression<String?>("car_model")
for car_list in cars {
println("car_model: \(car_list[car_model])")
var carlist[car_list[car_model]] // array
}
}
override func viewDidLoad(){
super.viewDidLoad()
让db=Database(“/Users/**/Desktop/NEW/car/car.sqlite”)
let cars=db[“cars”]
let car\u id=表达式(“car\u id”)
let car_model=表达式(“car_model”)
关于汽车中的汽车列表{
println(“车型:\(车型列表[车型]))
var carlist[car_list[car_model]]//数组
}
}
错误是,如果我将“let db”后面的行移到外部:“ViewController.Type”没有名为“db”的成员,那么问题是,您在
viewdiload
方法中声明了变量,而Swift没有看到该变量。您必须在如下方法之外声明它:
class YourClass{
//The DB-declaration
let db = Database("/Users/**/Desktop/NEW/car/car.sqlite")
override func viewDidLoad() {
super.viewDidLoad()
let cars = db["cars"]
let car_id = Expression<Int64>("car_id")
let car_model = Expression<String?>("car_model")
for car_list in cars {
println("car_model: \(car_list[car_model])")
var carlist[car_list[car_model]] // array
}
}
}
classyourclass{
//DB声明
让db=Database(“/Users/**/Desktop/NEW/car/car.sqlite”)
重写func viewDidLoad(){
super.viewDidLoad()
let cars=db[“cars”]
let car\u id=表达式(“car\u id”)
let car_model=表达式(“car_model”)
关于汽车中的汽车列表{
println(“车型:\(车型列表[车型]))
var carlist[car_list[car_model]]//数组
}
}
}
如您所见,我已经在任何函数之外声明了变量。这样,您就可以从类中的任何位置访问。有不同类型的变量。你可以这样看:
克里斯蒂安的答案是一半。实际问题是分配
车辆的行。db
声明不能在类范围中直接引用,因为它是一个实例变量。如果希望cars
在整个类中充当助手,您可以最简单地使用惰性变量:
class MyViewController: UIViewController {
let db = Database("/Users/**/Desktop/NEW/car/car.sqlite")
lazy var cars = self.db["cars"]
let car_id = Expression<Int64>("car_id")
let car_model = Expression<String?>("car_model")
override func viewDidLoad() {
super.viewDidLoad()
for car_list in cars {
println("car_model: \(car_list[car_model])")
}
}
}
或者您可以在viewDidLoad
上指定变量:
var cars: Query!
override func viewDidLoad() {
super.viewDidLoad()
cars = db["cars"]
}
谢谢,我的问题现在解决了。是我的错,逻辑问题
var cars: Query!
override func viewDidLoad() {
super.viewDidLoad()
cars = db["cars"]
}