У меня есть список следующих модельных классов
struct CommonRes {
var month: String?
var monthName: String?
var year: String?
var classIdCount: String?
var groupName: String?
}
var res = [CommonRes]()
В ответ я получаю повторяющиеся значения monthName. Я хочу составить список этих общих monthName, удалив дубликаты. Итак, из это я пробовал следующее
self.monthList = Array(Set(res.filter({ (i : CommonRes) in res.filter({ $0.monthName == i.monthName }).count > 1 })))
Но я получаю сообщение об ошибке
Ambiguous reference to member 'filter'





Вы можете попробовать это.
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)! })
Важная заметка: Принудительное развертывание было выполнено, потому что из источника данных очевидно, что вы получите только действительные месяцы.
этот код выдает сообщение, но не в порядке его выдачи [«Август», «Декабрь», «Ноябрь», «Октябрь»] ..
да ... отредактированный код работает отлично, просто запрос, который мне нужно принудительно обернуть! [String] .. повлияет ли это на мой код `self.monthList = Array (NSOrderedSet (array: res.compactMap ({$ 0.monthName}))) as! [Строка] `
@KiranS, пока вы не меняете тип monthName с String, этого не должно быть. Вы всегда можете безопасно развернуть упаковку с помощью if-let, если это вас беспокоит.
@Laffen, почему бы и нет?