如何添加到用户默认设置Swift 4中当前存储的号码

如何添加到用户默认设置Swift 4中当前存储的号码,swift,userdefaults,Swift,Userdefaults,我希望用户能够输入一个新的数字,它将被添加到当前保存在UserDefaults中的内容中,然后将该组合数字保存在UserDefaults中。有人知道怎么做吗?谢谢 代码: 不要将字符串保存为用户默认值。保存数字 然后: 从默认值中读取值 将新值添加到新读取的值中 将新金额保存回默认值 下面是“8”和“20”,它们分别是typeHours.text和typePay.text的替代品 UserDefaults.standard.set(535, forKey: "savedMoney")

我希望用户能够输入一个新的数字,它将被添加到当前保存在UserDefaults中的内容中,然后将该组合数字保存在UserDefaults中。有人知道怎么做吗?谢谢

代码:


不要将字符串保存为用户默认值。保存数字

然后:

  • 从默认值中读取值

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

  • 将新金额保存回默认值

  • 下面是“8”和“20”,它们分别是typeHours.text和typePay.text的替代品

      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")
      }
    

    这就是你要的。您应该将TotalMake变量作为双精度而不是字符串存储在用户默认值中。见下文:

    // 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")
    

    获取存储在
    UserDefaults
    中的值,将其添加到用户刚输入的值中,将新值存储在
    UserDefaults
    中。UserDefaults具有方便的方法
    double(forKey:)
    /
    integer(forKey:)
    (以及两种类型的相应设置方法)这让你可以无缝地读写整数和双倍数。我没有否决投票,但这段代码有一些问题。切勿使用
    setValue(forKey:)
    value(forKey:)
    UserDefaults
    中设置/获取值。这些是键值编码的方法。使用
    UserDefaults
    文档中列出的类型安全方法。我看不到never,它看起来像是非常标准的kvo东西。我改变了它,重点是在不需要KVC的情况下不必要地使用KVC会导致安全键入的成本,并且会增加一些开销。只有在你真正需要的时候才使用它。是否不需要访问我的默认值作为可选项?我不知道你最后的评论是什么意思。谢谢你的回复!我得到了一对“类型为'Double'的值没有成员'text'”的错误-有没有办法解决这个问题?@NicoleL。啊,那是因为文本字段的名称和“TotalMake”的变量名称是相同的。我会更新答案的,这很有效!因此,为了获得用户输入的值,我将使用TotalMake并将其从字符串转换为双精度,然后替换为“5.0”?再次感谢你们,我还在学习@尼科尔。是的,将其替换为用户用于输入值的文本字段。如果这个答案对你有帮助,请将它标记为正确答案!非常感谢您的帮助@podomunro!请让我知道,如果有什么我可以做的,以帮助您与您的分数或任何事情!
    // 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")