我有一个组织如下的列表:[“ ImageUrl”,“ Year”,“ Credit”,“ ImageUrl”,“ Year”,“ Credit” ...],并且我想显示图像的水平滚动视图以下是年份/学分。我已经尝试过像这样在SwiftUI中使用while循环,但是我收到一条错误消息,指出包含控制流语句的闭包不能与函数构建器'ViewBuilder'一起使用。
这是我的代码:
struct ImageList : View {
var listOfImages : Array<String>
@State var i = 0
var body: some View{
VStack{
while i < listOfImages.count {
VStack(){
KFImage(listOfImages[i]).resizable().frame(width: 200, height: 300).aspectRatio(contentMode: .fit)
Text(listOfImages[i+1])
Text(listOfImages[i+2])
}
i = i+3
}
}
}
}
我无法更新列表的组织方式,因为它已经来自我们的后端。我最初的计划是将list元素导入这样的对象列表中:
struct HistoricalImages: Hashable {
let link : String
let year : String
let credit : String
}
但是我不确定如何有效地转换它。任何帮助表示赞赏。这是我的第一篇StackOverflow帖子,所以请告诉我是否需要添加任何内容!
答案 0 :(得分:0)
使用索引范围将数组切片为3个元素的组,并为每个切片创建一个对象
var index = 0
var items = [HistoricalImages]()
while index < array.count {
let end = index + 2
if end > array.count {
break
}
let slice = Array(array[index...end])
items.append(HistoricalImages(link: slice[0], year: slice[1], credit: slice[2]))
index += 3
}
答案 1 :(得分:0)
您不能在while
属性内使用body
循环:
while i < listOfImages.count {
...
}
您需要改用ForEach
:
ForEach(0..<listOfImages.count) { idx in
...
}