快速过滤一个对象数组,表示尾随闭包已通过...不接受闭包

问题描述 投票:0回答:1

我有,我认为这是一个简单的问题,过滤一个对象数组,但无论出于何种原因,Xcode 决定过滤器不允许尾随闭包。我已经用头撞墙了大约一个小时,试图找出为什么我无法过滤一系列对象。这是我正在使用的代码,希望这只是我缺少的一些愚蠢的东西。

public struct MultiLineChartData: Identifiable {
    public let id: String = UUID().uuidString
    public var title: String
    public var data: [(day: Date, amount: Int)]
    public var formattedValue: String
    
    public init(title: String, data: [(day: Date, amount: Int)], formattedValue: String) {
        self.title = title
        self.data = data
        self.formattedValue = formattedValue
    }
}

然后我创建一个

MultiLineChartData
数组并尝试按特定日期过滤它......

static func getEntriesFromSelection(_ data: [MultiLineChartData], selectedDay: Date) -> [MultiLineChartData] {
  let searchDay = dateSearchFormat.string(from: selectedDay)
  return data.filter {
    return dateSearchFormat.string(from: $0.data.day) == searchDay
  }
}

但是,就在

return data.filter {
Xcode 给了我一个错误...

传递给类型参数的尾随闭包 不接受闭包的“谓词”

我在网上找到的所有内容以及我编写的其他代码都可以作为过滤器正常工作,但我无法弄清楚为什么这个特定实例告诉我过滤器不接受闭包。

arrays swift
1个回答
0
投票

你有两个

data
,一个在
func getEntriesFromSelection(_ data: [MultiLineChartData],...
中,这是一个
[MultiLineChartData]
的数组。

另一个位于该数组的每个元素中,即

var data: [(day: Date, amount: Int)]
。 这是另一个元组数组,数组没有 值
.day
就像您在
$0.data.day
中一样。

根据您要过滤的内容,尝试这种方法

 func getEntriesFromSelection(_ data: [MultiLineChartData], selectedDay: Date) -> [MultiLineChartData] {
     let searchDay = dateSearchFormat.string(from: selectedDay)
     return data.filter {
         if let first = $0.data.first {
             return dateSearchFormat.string(from: first.day) == searchDay
         } else {
             return false
         }
     }
 }
© www.soinside.com 2019 - 2024. All rights reserved.