【发布时间】:2020-10-13 14:54:03
【问题描述】:
我正在尝试以有序的方式显示自定义对象列表。 虽然这有效......
import SwiftUI
struct MyModel: Identifiable {
let id = UUID()
let timestamp: Date
}
struct ViewModel {
var models = [
MyModel(timestamp: Date().addingTimeInterval(300)),
MyModel(timestamp: Date().addingTimeInterval(100)),
MyModel(timestamp: Date().addingTimeInterval(500))
]
}
struct MyView: View {
@State var viewModel = ViewModel()
var body: some View {
List {
ForEach(viewModel.models.sorted(by: { (lhs, rhs) -> Bool in // will not work with `sort(by:)`
lhs.timestamp > rhs.timestamp
})) { model in
Text("\(model.timestamp)")
}
.onDelete(perform: { indexSet in
//delete from viewModel.models
})
}
}
}
...删除时它不够用,因为我正在处理的数组没有排序(可以说只是它的可视化)。
sort(by:) 应该是我需要的,因为它“对集合进行适当的排序,使用给定的谓词作为元素之间的比较。”根据 Apple 的文档。
但是,相同的ForEach 语句不适用于sort(by:),抛出错误Cannot convert value of type '()' to expected argument type 'Range<Int>'。
在这种情况下,有没有办法使用ForEach 进行就地排序和循环,还是我必须在我的ViewModel 中处理排序?
【问题讨论】:
-
一个是变异函数,另一个返回一个新数组。如果您只想在视图模型中对数组进行一次排序
-
好的,明白了。变异后,我可以在队列中获取变异数组吗?
-
这里的变异意味着文档说它是被排序的原始数组,所以你已经有了它。
-
我也是这么想的——不过,我不能用
ForEach循环它,这在 imo 中应该是可能的。 -
@ASSeeger 为什么应该是可能的?
Void的返回类型(又名空元组,())。迭代它与for i in print("hello world")没有什么不同:这没有任何意义。您正在寻找非变异版本,为什么不直接使用它?