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