[英]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.