我正在尝试获取数组“reviewArray”中所有值的总和。在网上寻找东西后,我设置了 self.reviewArray.reduce,但我收到错误消息,我不太确定到底要做什么“无法将类型 '(String,) -> String' 的值转换为预期的参数类型 '(, String) -> _'"我该如何解决这个问题?
这是我的代码
var reviewArray = [String]()
func testForGettingAllValues(){
let uid = user2?.id
let ref = FIRDatabase.database().reference().child("userRating").child(uid!)
ref.queryOrdered(byChild: "ratingNumber").observe(.value, with: {(snapshot) in
if snapshot.exists(){
if let values = snapshot.value as? [String: AnyObject]{
for reviews in values {
if let userReviews = reviews.value["ratingNumber"] as? String{
self.reviewArray.append(userReviews)
print("this is to check what is inside of the array", self.reviewArray)
//This is where i'm trying to find the sum of all the values inside of my array
var ratingSum = self.reviewArray.reduce(0,{$0 + $1})
}
}
}
}
})
}
}
最佳答案
您的 reviewArray
是 [String]
,因此您需要将评级转换为 Double
:
var ratingSum = self.reviewArray.reduce(0, {$0 + (Double($1) ?? 0)})
由于 String
可能不会转换为 Double
,我使用了 nil 合并运算符 ??
在这种情况下使用 0
。
或者,您可以首先使用 flatMap
将数组转换为 [Double]
以删除未转换为 Double
的值,然后使用reduce
:
var ratingSum = self.reviewArray.flatMap { Double($0) }.reduce(0, +)
如果您的评分是整数值,只需使用 Int
而不是上面的 Double
。
如果您的字符串有前导和尾随空格,您需要在转换为 Double
之前将其删除:
Double($0.trimmingCharacters(in: .whitespaces)) ?? 0
关于ios - 获取错误无法将类型 '(String,_) -> String' 的值转换为预期的参数类型 '(_, String) -> _',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42473672/