对成员“过滤器” swift4的含糊引用

时间:2018-12-10 10:49:48

标签: ios arrays swift

我有以下模型课程的列表

struct CommonRes {
var month: String?
var monthName: String?
var year: String?
var classIdCount: String?
var groupName: String?
}
 var res = [CommonRes]()

在响应中,我收到了monthName的重复值。我想通过删除重复项来列出这些常见monthName的列表。因此,从issue开始,我尝试了以下

 self.monthList = Array(Set(res.filter({ (i : CommonRes) in res.filter({ $0.monthName == i.monthName }).count > 1 })))

但是我收到一个错误

  

对成员“过滤器”的含糊不清

1 个答案:

答案 0 :(得分:2)

您可以尝试一下。

let monthList = Set(res.compactMap( {$0.monthName} )).sorted()

如果要保留数据源的顺序,则可以使用NSOrderedSet

let monthListOrdered = NSOrderedSet(array: res.compactMap( {$0.monthName})).array as! [String]

但是,如果希望月份按其在日历上的显示顺序,则需要将它们排序为日期。

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "MMM"
let monthList = Set(res.compactMap( {$0.monthName}))
let sortedMonthList = monthList.sorted(by: { dateFormatter.date(from: $0)! < dateFormatter.date(from: $1)! })

重要说明:已完成强制展开,因为从数据源中可以明显看出,您只会收到有效的月份。