[英]Can not use sqlite (swift) commands outside viewDidLoad()
我正在使用来自stephencelis的SQLite框架
我的问题是只能在viewDidLoad()中使用命令。 但是我必须在viewDidLoad之外的函数中使用已定义的变量(例如var carlist)。
我的逻辑问题在哪里?
我的代码被删除:
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
}
}
错误,如果我将“ let db”之后的行移到外部:“ ViewController.Type”没有名为“ db”的成员
您的问题是,您在viewDidLoad
方法中声明了变量,而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
}
}
}
如您所见,我已经在任何函数外部声明了变量。 这样,您可以从班级内的任何地方进行访问。 有不同种类的变量。 您可以看到这样的内容:
克里斯蒂安的答案就在那儿。 实际的问题是分配cars
的线路。 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])")
}
}
}
或者,您可以将其设为计算变量(但这效率较低,因为它每次都会初始化一个新值):
var cars: Query { return db["cars"] }
或者,您可以在viewDidLoad
上分配变量:
var cars: Query!
override func viewDidLoad() {
super.viewDidLoad()
cars = db["cars"]
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.