我正在使用SwiftUI创建NavigationLinks,将行与详细视图连接在NavigationView中(类似于教程https://developer.apple.com/tutorials/swiftui/building-lists-and-navigation中所做的)。 然而,在我的应用程序中测试时,NavgiationLink在被点击后立即从详细视图导航回先前的视图(详细视图仅显示了一秒钟)。
以下是代码:
看起来这可能是由于从
以下是代码:
struct ItemsView: View {
var body: some View {
NavigationView {
VStack {
List {
ForEach(Query.items) { item in
NavigationLink(destination: ItemDetail(item: item)) {
ItemRow(item: item)
}
}
}
Spacer()
}
.navigationBarTitle(Text("Items"))
}
}
}
private struct ItemRow: View {
var item: Item
var body: some View {
VStack(alignment: .leading) {
Text(item.title)
.font(.headline)
item.completionDate.map({
Text("Created \($0.shortDateTime)")
})
item.completionDate.map({
Text("Active \(Date().offsetString(from: $0)) ago")
})
}
}
}
struct ItemDetail: View {
var item: Item
var body: some View {
VStack {
Text("\(item.title)")
Text("\(String(describing: item.creationDate))")
Text("\(String(describing: item.completionDate))")
Text("\(item.complete)")
}
.navigationBarTitle(Text("Item"), displayMode: .inline)
}
}
使用 Realm
进行查询:
let realm = try! Realm()
class Query {
static let items = realm.objects(Item.self)
}
看起来这可能是由于从
realm.objects(Item.self)
返回的 Results<Item>
对象出现了问题。当我使用静态数据 let items = [Item(), Item()]
并调用 ForEach(items) { ... }
时,导航按预期工作。
Results
实例,该实例会根据 Realm 中所做的更改而保持最新状态。请参阅 https://realm.io/docs/swift/latest/#queries。我将Results
实例的类型更改为Array
,以便通过ForEach
函数正确地将对象传递到 SwiftUI。 - bioround