在我需要它之前,如何声明一个变量 nil?

How can I declare a variable nil until I need it?

我刚开始在 Swift 中使用 SQLite,并且 运行 遇到了声明问题。我想将所有内容包装在一个 class 中,然后我可以在上面调用方法。

我的问题是我不知道如何声明数据库,以便当我调用 Connect 时,它可以被填充并且在 class 存在时始终可用。我可以在初始化时调用 connect,但我不想在需要时调用 Connect。当我按如下方式编码时,出现以下错误:

Return from initializer without initializing all stored properties

class MySQL {
    var db : Connection
    var dbPath : String
    
    init() {
        dbPath = getDocumentsDirectory().absoluteString + "db.sqlite3"
    }
    
    func open(){
        do{
            db = try Connection(dbPath)}
        catch{}

        let users = Table("users")
        print(users)
    }
}

您可能想使用惰性 属性。

A lazy stored property is a property whose initial value isn’t calculated until the first time it’s used. You indicate a lazy stored property by writing the lazy modifier before its declaration.

class MySQL {
    lazy var db : Connection = {
        // Make initialisation here 
    }()
    var dbPath : String

    ...
}

您可以从 official docs 阅读更多信息。

I could call connect at the init, but I don't want to call Connect until I need it.

完全正确!不要在 init.

中做任何类似的事情

只需重写您的声明以创建连接 nil,完全按照您的建议:

class MySQL {
    var db : Connection? = nil
    var dbPath : String
    
    init() {
        dbPath = getDocumentsDirectory().absoluteString + "db.sqlite3"
    }
    
    func open(){
        do{
            db = try Connection(dbPath)}
        catch{}

        let users = Table("users")
        print(users)
    }
}

结果就是以后你跟self.db说话的时候,除了顺序设置,你都要检查是不是nil。您可以使用 Optional chaining 轻松地做到这一点。您可以通过将 db 声明为 Connection! 而不是 Connection? 来避免这种情况,但这有可能在以后发生崩溃,我不推荐它。