我想实现一种在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
访问其中任何一个,那么编译器就不知道该怎么做,但在目前的情况下这不是问题。
为了达到我想要的目的,我有什么办法可以注释财产吗?也许有些解决方法?