标签: swiftyuserdefaults

不明确的类型名称错误

我正在尝试重新编译 SwiftyUserDefaults( https://github.com/radex/SwiftyUserDefaults ) 以添加 Carthage 支持,但在尝试编译时我看到以下错误:

“NSUserDefaults”中不明确的类型名称“Proxy”

对于以下代码

public func ?= (proxy: NSUserDefaults.Proxy, @autoclosure expr: () -> Any) {
    if !proxy.defaults.hasKey(proxy.key) {
        proxy.defaults[proxy.key] = expr()
    }
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,“代理”对于类型查找是不明确的

为了

public subscript(key: String) -> Proxy {
    return Proxy(self, key)
}
Run Code Online (Sandbox Code Playgroud)

据我了解 - 问题出在类代理上,它嵌入在扩展中。

public extension NSUserDefaults {
    class Proxy {
        private let defaults: NSUserDefaults
        private let key: String

        private init(_ defaults: NSUserDefaults, _ key: String) {
            self.defaults = defaults
            self.key = key
        }

        // MARK: Getters

        public var object: …
Run Code Online (Sandbox Code Playgroud)

ios swift swiftyuserdefaults

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

Swift为现有用户默认值添加值

我得到了用户默认值,例如键"abc",它包含一个字符串.

存储在此密钥中的最后一个字符串是"aaa".

现在,我想为此密钥存储一个额外的值,但我不想删除最后一个值"aaa",因为我需要它.

我希望在第二个retreive中包含一个包含数组的字符串:["aaa","some_other_value","some_other_value2"...].

到目前为止,这是我的代码,用于存储用户默认值中的信息:

self.user_defaults.set(self.myTextField.text, forKey:"asd")
Run Code Online (Sandbox Code Playgroud)

这是获取数据的代码:

if let arr = user_defaults.string(forKey:"asd"){
    print (arr)
}
Run Code Online (Sandbox Code Playgroud)

nsuserdefaults ios swiftyuserdefaults swift3

2
推荐指数
1
解决办法
1692
查看次数

如何模拟和测试存储字符串的 UserDefaults 计算属性?

我试图模拟 UserDefaults 以便能够测试其行为。

在不破坏保存用户令牌密钥的实际计算属性的情况下,最好的方法是什么?

class UserDefaultsService {

  private struct Keys {
    static let token = "partageTokenKey"
  }

  //MARK: - Save or retrieve the user token
  static var token: String? {
    get {
      return UserDefaults.standard.string(
        forKey: Keys.token)
    }
    set {
      UserDefaults.standard.set(
        newValue, forKey: Keys.token)
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

testing swift swiftyuserdefaults

2
推荐指数
1
解决办法
2922
查看次数

是否可以经常访问NSUserDefaults/UserDefaults?

我有一个登录视图控制器,用户可以在其中输入他们的首选项,例如他是否要激活某些UI功能.

我将这些存储为getter和setter直接访问的变量UserDefaults,以下是其中一个示例:

class Preferences {
        static var likesSpaghetti : Bool {
            set (likesSpaghetti) {
                UserDefaults.standard.set(likesSpaghetti, forKey: "likesSpaghetti")
            }

            get {
                return UserDefaults.standard.bool(forKey: "likesSpaghetti")
            }
        }
}
Run Code Online (Sandbox Code Playgroud)

因此,每当我想要设置其中任何一个时,我只需编写如下内容:

Preferences.likesSpaghetti = false

现在,我的问题是:每次用户轻拂开/关开关时我都可以设置这些变量,还是应该将首选项保持为局部变量,然后才设置:

Preferences.likesSpaghetti = spaghettiSwitch.isOn

当用户离开时loginViewController?每次访问都是UserDefault即时快速的吗?或是它是否滞后,应该仁慈地使用?

关闭这个问题后编辑:所以我学会了不要过早地优化,并且它可能在几十个元素的范围内.所以我应该没事.每次用户修改任何内容时我都会更新,以便我的代码更容易阅读和维护.

感谢大家!

nsuserdefaults ios swift swiftyuserdefaults

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