在Swift中使用协议中的静态成员获取依赖关系?

时间:2016-11-14 18:42:47

标签: swift dependencies

我想实现一种在Swift中获取依赖关系的简单方法,而不需要使用任何依赖注入框架的重载。为了实现这一点,我有我的协议Persistence,它的实现UserDefaultsPersistence,以及Persistence的扩展,它为协议添加一个静态属性来检索它的实例。

整个代码如下所示:

protocol Persistence {
    func getUserToken () -> String?

    func setUserToken(token: String)        
}

extension Persistence {
    static var sharedInstance: Persistence {            
        return UserDefaultsPersistence.sharedInstance
    }
}

class UserDefaultsPersistence : Persistence {
    let userDefaults = UserDefaults.standard

    let tokenKey = "token"

    static let sharedInstance: UserDefaultsPersistence = UserDefaultsPersistence()

    private init() { }

    func getUserToken() -> String? {
        return userDefaults.value(forKey: tokenKey) as? String
    }

    func setUserToken(token: String) {
        userDefaults.set(token, forKey: tokenKey)
    }
}

此代码编译没有问题,但是,当我尝试访问Persistence.sharedInstance时,我收到编译错误,说我无法直接从协议访问此字段。

我知道如果我的协议有其他静态成员且sharedInstance访问其中任何一个,那么编译器就不知道该怎么做,但在目前的情况下这不是问题。

为了达到我想要的目的,我有什么办法可以注释财产吗?也许有些解决方法?

0 个答案:

没有答案