我正在尝试将“Realm”与“stackoverflow”上找到的几行代码一起使用。
我收到一个神秘的编译错误:
无法推断通用参数“Element”
上线:let dogs = List
我已经尝试了一切,清理构建,退出Xcode,从头开始创建一个新项目,但仍然存在这个错误......
import SwiftUI
import RealmSwift
class Dog: Object {
@objc dynamic var name = ""
@objc dynamic var age = 0
}
class Person: Object {
@objc dynamic var name = ""
let dogs = List<Dog>()
}
struct ContentView: View {
var body: some View {
VStack {
Image(systemName: "globe")
.imageScale(.large)
.foregroundStyle(.tint)
Text("toto")
.onAppear {
let myDog = Dog()
myDog.name = "Rex"
myDog.age = 5
hop(myDog: myDog)
}
}
.padding()
}
func hop(myDog: Dog) {
let realm = try! Realm()
let person = Person()
person.name = "Tim"
person.dogs.append(myDog)
try! realm.write {
realm.add(person)
}
}
}
欢迎来到SO。
第一件事是将 @objc 与 Swift 混合;没有理由这样做(事实上,不这样做)。此时请坚持使用 Swift 语法。
所以两个Realm模型应该是这样的
class Dog: Object {
@Persisted var name = ""
@Persisted var age = 0
}
class Person: Object {
@Persisted var name = ""
@Persisted var dogs = RealmSwift.List<Dog>() //specify RealmSwift here*
}
第二件事是在
.onAppear
函数中 - 每当调用 .onAppear 时,都会实例化一个狗对象,一个人对象将被实例化,并且两者都会写入 Realm。随着时间的推移,最终结果是您将拥有一个充满 Tim 和 Rex 的数据库,但这可能不是您想要的。
此处需要隐式使用 *
RealmSwift.List
以避免与 SwiftUI 的 List
发生名称冲突。