获取错误无法转换类型'(String,_) - >的值String'到期望的参数类型'(_,String) - > _”

时间:2017-02-26 20:11:58

标签: ios arrays swift firebase firebase-realtime-database

我正在尝试获取数组“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})


                        }

                    }
                }
            }
        })
    }
}

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