我在我的响应中获取字符串的值,我将其存储在数组中。它正在正确存储。现在我想从我的数组中获取值,因为稍后我必须在另一个字符串中添加它以获得它们的总和。我的数组看起来像这样,[0.5,0.5,0.5]。我必须提取所有0.5值并添加它们。我尝试了一个代码,它提取了值,但结果显示0值。我的代码是这样的,
let itemprice = UserDefaults.standard.string(forKey: "itemPrice")
print(itemprice)
let defaults = UserDefaults.standard
let array = defaults.array(forKey: "addonPrice") as? [Int] ?? [Int]()
print(array)
let resultant = array.reduce(0, +)
print(resultant)
let result = itemprice! + String(resultant)
print(result)
我正在尝试将数组值添加到名为itemprice的另一个值。如何从阵列中取出所有值并添加它们。数组中的值会有不同的时间。
由于0
,你得到let resultant = array.reduce(0, +)
因为在
let array = defaults.array(forKey: "addonPrice") as? [Int] ?? [Int]()
存储在默认值中的值是空数组,或者转换为as? [Int]
失败。
考虑到你声称数组应该保持值[0.5,0.5,0.5]
我假设它是后一种情况。 [0.5,0.5,0.5]
是Double
值的数组,而不是Int
值。
尝试以这种方式解决它:
let array = defaults.array(forKey: "addonPrice") as? [Double] ?? [Double]()
UPDATE
从评论看来,你到处都在使用字符串,所以:
let itemprice = UserDefaults.standard.string(forKey: "itemPrice")
print(itemprice)
let defaults = UserDefaults.standard
// take it as an array of strings
let array = defaults.array(forKey: "addonPrice") as? [String] ?? [String]()
print(array)
// convert strings to Double
let resultant = array.map { Double($0)! }.reduce(0, +)
print(resultant)
let result = Double(itemprice!)! + resultant
print(result)
虽然我强烈建议你从一开始就使用Double
(两者都存储并使用它)。