如何添加到当前存储在用户默认值 Swift 4 中的数字

Posted

技术标签:

【中文标题】如何添加到当前存储在用户默认值 Swift 4 中的数字【英文标题】:How to add to a number currently stored in user defaults Swift 4 【发布时间】:2018-03-08 18:58:34 【问题描述】:

我希望用户能够输入一个新数字,它将被添加到当前保存在 UserDefaults 中的内容中,然后将该组合数字保存在用户默认值中。任何人都知道如何做到这一点?谢谢!

代码:

    let typeHoursInt = Double(typeHours.text!)!
    let typePayInt = Double(typePay.text!)!
    totalMade.text = String(typeHoursInt * typePayInt)

    UserDefaults.standard.set(totalMade.text, forKey: "savedMoney")

【问题讨论】:

获取存储在UserDefaults 中的值,将其添加到用户刚刚输入的内容中,将新值存储在UserDefaults 中。 【参考方案1】:

不要将字符串保存到 userDefaults。保存号码。

然后:

    从默认值中读取值。

    将新值添加到新读取的值中

    将新总和保存回默认值。

【讨论】:

UserDefaults 具有方便的方法double(forKey:)/integer(forKey:)(以及两种类型的相应设置方法),可以让您无缝地读取和写入 Ints 和 double。【参考方案2】:

这可以满足您的要求。您应该将您的 totalMade 变量作为 Double,而不是 String 存储在 User Defaults 中。见下文:

// your original code
let typeHoursInt = Double(typeHours.text!)!
let typePayInt = Double(typePay.text!)!

let total = typeHoursInt * typePayInt

totalMade.text = String(total)

// saving original value in User Defaults
UserDefaults.standard.set(total, forKey: "savedMoney")

// retrieving value from user defaults
var savedMoney = UserDefaults.standard.double(forKey: "savedMoney")

// adding to the retrieved value
savedMoney = savedMoney + 5.0

// resaving to User Defaults
UserDefaults.standard.set(savedMoney, forKey: "savedMoney")

【讨论】:

感谢您的回复!我收到了几个“'Double' 类型的值没有成员 'text'”错误 - 有什么想法可以解决这个问题吗? @NicoleL。啊,那是因为您的文本字段的名称和“totalMade”的变量名称相同。我会更新答案。 行得通!因此,要获取用户输入的值,我将使用 totalMade 并将其从 String 转换为 Double 并替换 '5.0'?再次,非常感谢 - 我还在学习! @NicoleL。是的,将其替换为用户用于输入值的文本字段。如果这个答案对你有帮助,请标记为正确答案! 非常感谢您的帮助 @podomunro !请让我知道是否有任何其他事情可以帮助您提高分数或其他任何事情!【参考方案3】:

您会在下面找到 "8""20",它们是 typeHours.texttypePay 的替代品。文本分别。

  UserDefaults.standard.set(535, forKey: "savedMoney")

  if let typeHoursInt = Int("8"), let typePayInt = Int("20") 
    let totalMade = typeHoursInt * typePayInt
    let newTotal = UserDefaults.standard.integer(forKey: "savedMoney") + totalMade
    UserDefaults.standard.set(newTotal, forKey: "savedMoney")
  

【讨论】:

我没有投反对票,但这段代码有一些问题。切勿使用setValue(forKey:)value(forKey:) 设置/获取UserDefaults 中的值。这些是键值编码的方法。使用UserDefaults 的文档中列出的类型安全方法。 我没有看到 never,看起来像是很标准的 kvo 东西。反正我改了。 关键是,在不需要时不必要地使用 KVC 会花费您安全键入的成本,并且会增加一些开销。仅在您真正需要时使用它。 是否不需要将我的默认设置为可选? 我不知道你最后的评论是什么意思。

以上是关于如何添加到当前存储在用户默认值 Swift 4 中的数字的主要内容,如果未能解决你的问题,请参考以下文章

如何将 JSON 令牌保存到用户默认值,然后在不同的视图中使用它?斯威夫特 4

如何在swift中将json数组保存和检索到用户默认值?

使用 swift 将数组保存和检索到用户默认值

在 Swift 中将存储属性添加到 NSManagedObject 的子类

多个用户访问相同的用户默认数据 Swift

Swift - 根据数组值从 Parse 表中加载