2015-06-29 2 views
1

Im используя Squeal для доступа к базе данных Sqlite для моего приложения. Я хочу написать его как вспомогательный класс Singleton, но я не могу понять, как создать глобальную версию класса db.Написание Singleton в Swift для Squeal

Heres код для всего файла:

import Foundation 

import Squeal 

class DatabaseHelper { 
    static let sharedInstance = DatabaseHelper() 

    let databaseFile = "record_store.db" 

    private init() { 
     let db = Database(path:databaseFile) 

     // Create the table 
     db?.createTable(
      "Records", 
      definitions: [ 
       "ID INTEGER PRIMARY KEY AUTOINCREMENT", 
       "Artist TEXT", 
       "Album TEXT", 
       "Gnere TEXT", 
       "Year TEXT", 
       "Size TEXT", 
       "Speed Text" 
      ] 
     ) 

     NSLog("Database Created") 
    } 

    func Insert() { 
     NSLog("Inserting stuff") 
    } 

    func Delete() { 
     NSLog("Deleting stuff") 
    } 
} 

Так как я могу сделать что db доступными для всего класса? Я попытался объявить

let db 

и

let db = Database(path:databaseFile) 

, но и ошибки броска, что я не знаю, как обращаться.

ответ

2

@Ali Beadle был правильный ответ. Я хотел бы расширить это с полным примером, чтобы вы поняли это.

Я также сделал databaseFile постоянным частным. Я не думаю, что вам нужны другие люди, которые обращаются к имени файла, только к фактической базе данных.

import Foundation 

import Squeal 

class DatabaseHelper { 
static let sharedInstance = DatabaseHelper() 

private let databaseFile = "record_store.db" 

let db: Database 

private init() { 
    db = Database(path:databaseFile) 

    // Create the table 
    db?.createTable(
     "Records", 
     definitions: [ 
      "ID INTEGER PRIMARY KEY AUTOINCREMENT", 
      "Artist TEXT", 
      "Album TEXT", 
      "Gnere TEXT", 
      "Year TEXT", 
      "Size TEXT", 
      "Speed Text" 
     ] 
    ) 

    NSLog("Database Created") 
} 

func Insert() { 
    NSLog("Inserting stuff") 
} 

func Delete() { 
    NSLog("Deleting stuff") 
} 

}

0

Вне вашего использования INIT:

let db:Database 

Но в изменении INIT:

let db = Database(path:databaseFile) 

To:

db = Database(path:databaseFile)