【问题标题】:How to re-instantiate a class with static methods?如何使用静态方法重新实例化一个类?
【发布时间】:2018-10-11 12:59:29
【问题描述】:

我有一个类来管理我的 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 { ... }
}

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

【问题讨论】:

  • 是否只需要更新/重新计算fileUrl的值?
  • 是........

标签: swift class static


【解决方案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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-09
    • 1970-01-01
    • 2012-09-23
    • 2013-07-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多