对成员'filter' swift4的模糊引用

我有以下模型类的列表

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

在响应中,我收到了monthName的重复值 . 我想通过删除重复项来列出这些常见的monthName . 所以从this我尝试了以下内容

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

但我收到一个错误

对成员'过滤'的模糊引用

回答(1)

2 years ago

你可以试试这个 .

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)! })

Important Note: 已完成强制解包,因为从数据源中可以明显看出,您只会收到有效的月份 .