Поиск в массиве пользовательских объектов в словареIOS

Программируем под IOS
Ответить
Anonymous
 Поиск в массиве пользовательских объектов в словаре

Сообщение Anonymous »

У меня есть словарь, в котором ключ имеет строковый тип, а значение — массив пользовательских объектов. Я работаю над пользовательским интерфейсом поиска, в котором, когда пользователь что-то ищет, приложение должно проверять поисковый запрос в одном из свойств этого настраиваемого объекта. Однако я получаю сообщение об ошибке.

Код: Выделить всё

import SwiftUI

struct Book: Hashable {
var bookName: String
var authorName: String
}

struct ContentView: View {
let bookData: [String: [Book]] = ["Fictional": [Book.init(bookName: "titleA", authorName: "AuthorA"), Book.init(bookName: "titleB", authorName: "AuthorB")],
"Non-Fictional":  [Book.init(bookName: "titleCA", authorName: "AuthorC")]]

var body: some View {
VStack {
Text("Hello World")
}
.onAppear {
let matchingResults = bookData.filter({ $0.value.filter({ $0.bookName.localizedCaseInsensitiveContains("A") }) })

// Expecting below output since book names have 'A' in it.
// ["Fictional": [Book.init(bookName: "titleA", authorName: "AuthorA")], "Non-Fictional":  [Book.init(bookName: "titleCA", authorName: "AuthorC")]]
}
}
}
В приведенном выше примере, если я ищу «A» или «a», результат должен быть

Код: Выделить всё

["Fictional": [Book.init(bookName: "titleA", authorName: "AuthorA")], "Non-Fictional":  [Book.init(bookName: "titleCA", authorName: "AuthorC")]]
, поскольку "titleA" и "titleCA" содержат A.
Но вместо этого я вижу следующую ошибку: "Невозможно преобразовать значение типа '[Employee]' в тип результата закрытия 'Bool '" в строке, где я фильтрую данные, т.е. "searchResults = groupedEmployees.filter({ $0.value.filter({ $0.fullName.localizedCaseInsensitiveContains(searchTerm) }) })"
Как выполнить поиск в массиве пользовательских объектов в словаре?

Подробнее здесь: https://stackoverflow.com/questions/785 ... dictionary
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»