我正在尝试获取数组“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})
}
}
}
}
})
}
}
答案 0 :(得分:2)
您的reviewArray
为[String]
,因此您需要将评分转换为Double
:
var ratingSum = self.reviewArray.reduce(0, {$0 + (Double($1) ?? 0)})
由于String
可能无法转换为Double
,我已使用 nil coalescing operator ??
来使用0
在那种情况下。
或者,您可以先使用[Double]
将数组转换为flatMap
,以删除未转换为Double
然后使用reduce
的值:
var ratingSum = self.reviewArray.flatMap { Double($0) }.reduce(0, +)
如果您的评分为整数值,请使用Int
代替上面的Double
。
如果您的字符串具有前导和尾随空格,则需要在转换为Double
之前将其删除:
Double($0.trimmingCharacters(in: .whitespaces)) ?? 0