Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 无法在viewDidLoad()之外使用sqlite(swift)命令_Ios_Sqlite_Swift - Fatal编程技术网

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

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")

我正在使用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
     }
    }
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"]
}