问题
I’m trying to fetch all of the items from Realm and display them in a SwiftUI List but I keep getting an error.
In a UIKit/Realm application, I would just create a Results variable to store all of the items from Realm then, I would fetch items in the viewDidLoad method and assign them to the variable. I'm trying to do the same thing in SwiftUI but I'm not sure how to structure my code, I keep getting an error saying that my Realm model should conform to the StringProtocol, I'm pretty sure this has to do with my lack of understanding Binding in SwiftUI.
Again, all I’m trying to do is fetch all of the items from Realm and display them in a SwiftUI List.
Here is what I have.
Realm Object:
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 Code:
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)
}
}
Error:
Initializer 'init(_:)' requires that 'User' conform to 'StringProtocol'
What am I missing?
回答1:
Probably you meant this
ForEach(allUsers, id:\.self) { user in
Text(user.name)
}
来源:https://stackoverflow.com/questions/61160102/what-is-the-right-way-to-present-data-from-realm-in-swiftui-list