如何用静态方法重新实例化一个类?

时间:2018-10-11 12:59:30

标签: swift class static

我有一个类来管理SQLite数据库,所以我有一个静态变量来存储数据库路径。

class SQLite {

    static let fileUrl = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true).appendingPathComponent(SQLiteManager.databaseName())
    .
    .
    . // static methods...
    static func readById<T: ObjectInit>(tabela: String, id: Int, typeClass: T.Type) -> T { ... }
}

但是当我更改登录用户时,我需要在不重新启动应用程序的情况下重新实例化此类,所以我要这样做吗?

1 个答案:

答案 0 :(得分:1)

您可以简单地使fileUrl可变,当用户注销时,您可以再次使用其新值更新fileUrl

static var fileUrl = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true).appendingPathComponent(SQLiteManager.databaseName())

func login(){
    //Do all login related tasks
    ...
    // After the user is logged in and SQLiteManager.databaseName() is updated
    SQLite.fileUrl = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true).appendingPathComponent(SQLiteManager.databaseName())
}

您还可以将fileUrl设为计算属性,但实际上,如果您只需要在用户注销后再次更新它,然后再次登录并使用fileUrl,就比切换用户更频繁地使用它,每次访问fileUrl都会重新计算。

另一种可能性是,假设该函数是您可以修改的自定义函数,而不是第三方库中的方法,则可以从fileUrl重新计算SQLiteManager.databaseName()