Как правильно представлять данные из Realm в списке SwiftUI? - PullRequest
1 голос
/ 11 апреля 2020

Я пытаюсь извлечь все элементы из Realm и отобразить их в SwiftUI List, но постоянно получаю сообщение об ошибке.

В приложении UIKit/Realm я бы просто создал Results переменная для хранения всех элементов из Realm, тогда я выберу элементы в методе viewDidLoad и назначу их переменной. Я пытаюсь сделать то же самое в SwiftUI, но я не уверен, как структурировать мой код, я получаю сообщение об ошибке, говорящее, что моя модель Realm должна соответствовать StringProtocol, я уверен это связано с моим непониманием Binding в SwiftUI.

Опять же, все, что я пытаюсь сделать, это извлечь все элементы из Realm и отобразить их в SwiftUI List

Вот что у меня есть.

Объект области:

class User:Object{
    @objc dynamic var name:String = ""
    @objc dynamic var age:Int = 0
    @objc dynamic var createdAt = NSDate()

    @objc dynamic var userID = UUID().uuidString
    override static func primaryKey() -> String? {
        return "userID"
    }
}

Код SwiftUI:

struct ContentView: View {
    @State private var allUsers : Results<User>!
    var body: some View {
        VStack{
            List{
                ForEach(allUsers, id:\.self) { user in
                    Text(user) // the error points here
                }
            }
        }.onAppear(){
            self.updateUserResults()
        }
    }
    func updateUserResults(){
        allUsers = realm.objects(User.self)
    }
}

Ошибка:

Инициализатор 'init (_ :)' требует, чтобы 'User' соответствовал 'StringProtocol'

Чего мне не хватает?

1 Ответ

2 голосов
/ 11 апреля 2020

Возможно, вы имели в виду это

ForEach(allUsers, id:\.self) { user in
    Text(user.name)
}
...