在我的代码中,我在列表中显示数字。用户可以选择分组方法,数字将相应地放入区段(5个元素或奇数/偶数组)。现在,我想在4*n个元素后面添加一个绿色行,其中n=1,2,3,.从用户界面的Angular 来看(不是从数据源的Angular 看!)因此,在第四行之后,应该会有一排绿色的。在第八行之后,绿色的一行应该跟在后面,依此类推。
在我当前的代码中,这适用于5个元素的组,但不适用于奇/偶变量。问题似乎出在索引中,因为它们不依赖于实际位置。我知道这听起来有点复杂,但也许有人知道如何处理这个问题,最好是以某种可伸缩的方式,这样如果我在未来添加第三个分组方法,它也会起作用。
import SwiftUI
import Combine
struct ContentView: View {
@StateObject var myViewModel = MyViewModel()
var body: some View {
VStack {
Button {
myViewModel.groupStrategy.send(myViewModel.groupStrategy.value == .multiplesOfFive ? .oddEven : .multiplesOfFive)
} label: {
Text("Toggle grouping strategy")
}
List() {
ForEach(myViewModel.numOfSections, id:.self) { sectNum in
Section("Sc (sectNum)") {
ForEach(Array(myViewModel.nums.enumerated()), id: .offset) { idx, element in
let _ = print("Sc (sectNum) (idx) (element)")
if myViewModel.shouldSkipNumberInThisSection(number: element, sectionNumber: sectNum) {
EmptyView()
} else {
Text(element.description + " idx: " + idx.description)
if idx > 0 && (idx+1) % 4 == 0 {
Color.green
}
}
}
}
}
}
}
.padding()
}
}
class MyViewModel: ObservableObject {
enum GroupStrategy {
case multiplesOfFive
case oddEven
}
@Published var nums: [Int]
@Published var numOfSections: [Int] = []
var groupStrategy = CurrentValueSubject<GroupStrategy, Never>(.multiplesOfFive)
private var cancellables: Set<AnyCancellable> = []
func shouldSkipNumberInThisSection(number: Int, sectionNumber: Int) -> Bool {
switch groupStrategy.value {
case .multiplesOfFive:
return number >= sectionNumber * 5 || number < (sectionNumber-1) * 5
case .oddEven:
return sectionNumber == 0 ? (number % 2) == 0 : (number % 2) != 0
}
}
func shouldPutGreenRow() -> Bool {
return false
}
init() {
self.nums = []
let numbers: [Int] = Array(3...27)
self.nums = numbers
self.numOfSections = Array(1..<Int(nums.count / 5)+1)
groupStrategy.sink { strategy in
switch self.groupStrategy.value {
case .multiplesOfFive:
self.numOfSections = Array(1..<Int(self.nums.count / 5)+1)
case .oddEven:
self.numOfSections = Array(0..<2)
}
}.store(in: &cancellables)
}
}
对于MultiesOfFive组-OK:
对于奇数/偶数组-不正常:
在奇数/偶数组中,绿色行应出现在数字9、17、25、8、16、24之后。相反,它只出现在偶数组中
暂无答案!
目前还没有任何答案,快来回答吧!