ios - 获取错误无法将类型 '(String,_) -> String' 的值转换为预期的参数类型 '(_, String) -> _'

标签 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})


                        }

                    }
                }
            }
        })
    }
}

最佳答案

您的 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/

相关文章:

C# - Foreach 循环仅迭代某些对象

ios - 分配给 nowPlayingInfo 后,MPNowPlayingInfoCenter 不更新任何信息

ios - 无法在 swift 中重载 viewDidLoad() 中的函数

ios - 照片滤镜使 iPod 上的应用程序崩溃

ios - 适用于 iOS 的自定义图像选择器

android - 官方 "Boost library"支持安卓和iOS?

arrays - BASH:在部分数组输出周围加双引号?

带有 byte[] 参数的 NHibernate ISQLQuery 抛出错误

arrays - 如何使用路径中文件中的数组序列化 JSON 数组?

ios - 滚动表上的 ProgressView block