struct Menu: Codable {
var id: String
var name: String
var description: String
var image: String
var amount: String
var category: String
}
var menu = "[\r\n {\r\n \"name\": \"Espresso\",\r\n \"id\": \"coffe\",\r\n \"description\": \"\",\r\n \"image\": \"\",\r\n \"amount\": \"0.0\",\r\n \"category\": \"Coffee\"\r\n },\r\n {\r\n \"name\": \"Latte\",\r\n \"id\": \"coffe\",\r\n \"description\": \"\",\r\n \"image\": \"\",\r\n \"amount\": \"0.0\",\r\n \"category\": \"Coffee\"\r\n },\r\n {\r\n \"id\": \"coffe-nosugar\",\r\n \"name\": \"Hot Chocolate\",\r\n \"description\": \"\",\r\n \"image\": \"\",\r\n \"amount\": \"0.0\",\r\n \"category\": \"Tea\"\r\n },\r\n {\r\n \"id\": \"tea\",\r\n \"name\": \"Red Tea\",\r\n \"description\": \" \",\r\n \"amount\": \"0.0\",\r\n \"image\": \"\",\r\n \"category\": \"Tea\"\r\n },\r\n {\r\n \"id\": \"tea\",\r\n \"name\": \"Green Tea\",\r\n \"description\": \" \",\r\n \"amount\": \"0.0\",\r\n \"image\": \"\",\r\n \"category\": \"Tea\"\r\n },\r\n {\r\n \"id\": \"fresh-juice\",\r\n \"name\": \"Orange\",\r\n \"description\": \"\",\r\n \"amount\": \"0.0\",\r\n \"image\": \"\",\r\n \"category\": \"Juice\"\r\n }\r\n]"
if let data = menu.data(using: .utf8) {
let decoder = JSONDecoder()
do {
let menus = try decoder.decode([Menu].self, from: data)
let categorizedMenu = Dictionary(grouping: menus) { $0.category }
} catch {
print(error.localizedDescription)
}
}
Эта строка делает свое дело, что здесь происходит, мы группируем массив объектов по свойству, которое категория :
Dictionary(grouping: menus) { $0.category }
Кстати, в моем ответе,Я добавил новое свойство, которое категория в объекте, не рекомендуется группировать объекты по id , поскольку id всегда уникально .