簡體   English   中英

無法在viewDidLoad()之外使用sqlite(swift)命令

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM