繁体   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