我知道我们可以直接在@Query中排序和排序,但是我正在尝试实现一个功能以允许用户使用列表(在编辑模式下)手动排序
@Query(sort: \FavouriteCommunity.order) private var favouriteCommunities: [FavouriteCommunity]
List {
Section("Top communities") {
// Some other views
}
Section("Favorites") {
ForEach(favouriteCommunities) { item in
NavigationLink(value: item) {
FavouriteCommunityCellView(item: item)
}
}
.onMove { from, to in
favouriteCommunities.move(fromOffsets: from, toOffset: to)
}
}
}
我收到错误:无法对不可变值使用变异成员:“favouriteCommunities”是仅获取属性
当我使用 @Bindable 时,我实际上可以编辑 FavouriteCommunityCellView(item: item) 中的项目,因此我知道可以在对象级别进行编辑。查询似乎无法改变,所以很好奇是否有人对如何在 SwiftData 之上创建重新排序功能有任何建议。谢谢!
我也有类似的问题。这是我的解决方案应用于您的具体示例。我希望这有帮助。
.onMove(perform: { indices, newOffset in
var s = favouriteCommunities.sorted(by: { $0.order < $1.order })
s.move(fromOffsets: indices, toOffset: newOffset)
for (index, item) in s.enumerated() {
item.order = index
}
try? self.modelContext.save()
})
基本上,您执行以下操作: