Как использовать перечисления в предикатах с @Query и SwiftDataIOS

Программируем под IOS
Ответить
Anonymous
 Как использовать перечисления в предикатах с @Query и SwiftData

Сообщение Anonymous »

Итак, у меня есть этот код: < /p>
import SwiftUI
import SwiftData

enum MyEnum: String, CaseIterable, Codable {
case first = "first case"
case second = "second case"
case third = "third case"
}

@Model
final class Item {
@Attribute(.unique) var id = UUID()
private(set) var name: String
private(set) var myEnum: MyEnum
init(name: String, myEnum: MyEnum) {
self.name = name
self.myEnum = myEnum
}
}

struct ContentView: View {
@Environment(\.modelContext) var modelContext
@Query private var items: [Item]

init(myEnum: MyEnum) {
_items = Query(filter: #Predicate {
$0.myEnum == myEnum
}, sort: [SortDescriptor(\Item.name)])
}
var body: some View {
NavigationStack {
List {
Section("Items") {
ForEach(items) { item in
HStack {
Text(item.name)
Spacer()
Text(item.myEnum.rawValue)
}
}
}
}
}.onAppear {
addItems()
}
}

func addItems() {
let enumCases = MyEnum.allCases

for i in 0..
Это просто упрощенный код, и когда я пытаюсь сравнивать перечисления, я получаю: < /p>

Запрос, встречая ошибку: не поддерживается предикат: Captured /constant
type 'myenum' не поддерживался < /p>

init(myEnum: MyEnum) {
_items = Query(filter: #Predicate {
$0.myEnum.rawValue == myEnum.rawValue
}, sort: [SortDescriptor(\Item.name)])
}
< /code>
Но нет ... Я получаю: < /p>

Не удалось подтвердить \ item.myenum.rawvalue, потому что Rawvalue не является членом Myenum < /p>
< /blockquote>
Вопрос, как использовать Enums в предсказаниях? Есть обходной путь?

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

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

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

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

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

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