我有一个类来管理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 { ... }
}
但是当我更改登录用户时,我需要在不重新启动应用程序的情况下重新实例化此类,所以我要这样做吗?
答案 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()
。