小编gas*_*sho的帖子

如何在 Swift 中测试和模拟属性包装器?

假设我有一个使用 的属性包装器的非常常见的用例UserDefaults。

@propertyWrapper
struct DefaultsStorage<Value> {
    private let key: String
    private let storage: UserDefaults
    
    var wrappedValue: Value? {
        get {
            guard let value = storage.value(forKey: key) as? Value else {
                return nil
            }
            
            return value
        }
        
        nonmutating set {
            storage.setValue(newValue, forKey: key)
        }
    }
    
    init(key: String, storage: UserDefaults = .standard) {
        self.key = key
        self.storage = storage
    }
}
Run Code Online (Sandbox Code Playgroud)

我现在声明一个对象,该对象将保存存储在UserDefaults.

struct UserDefaultsStorage {
    @DefaultsStorage(key: "userName")
    var userName: String?
}
Run Code Online (Sandbox Code Playgroud)

现在,当我想在某个地方使用它时,比如说在视图模型中,我会有这样的东西。

final class ViewModel {
    func getUserName() …
Run Code Online (Sandbox Code Playgroud)

ios swift property-wrapper

5
推荐指数
1
解决办法
1978
查看次数

标签 统计

ios ×1

property-wrapper ×1

swift ×1