import SwiftUI
РуководствоImageView currentPage означает 1VStack, который находится в тексте и изображениях из массива из руководств.
struct GuideImageView: View {
@State var currentPage: Int = 0
var body: some View {
VStack{
TabView(selection: $currentPage){
ForEach(guidelists){i in
VStack{
Text(i.explain)
Image(i.image)
.resizable()
}
}
}.tabViewStyle(PageTabViewStyle(indexDisplayMode: .never)) //page처럼 구현 + ...을 안보이게함
Button("Next") {
if currentPage == 3 {
currentPage = 0
//return
}else{
currentPage += 1
}
}
}
}
}
Структура GuideList
struct GuideList: Identifiable, Hashable{//가이드리스트 구조체, 이미지와 설명넣기
let id = UUID() //UUID = 고유식별자
let image: String
let explain: String
}
пусть путеводители
let guidelists = [
GuideList(image: "image1",explain: "explain1." ),
GuideList(image: "image2",explain: "explain2." ),
GuideList(image: "image3",explain: "explain3." )
]
GuideImageView_Previews
struct ImageView_Previews: PreviewProvider {
static var previews: some View {
GuideImageView()
}
}
Я хочу сделать кнопку для перехода на следующую страницу кнопка похоже не работает
Причиной того, что это не работает, является несоответствие типов в идентификаторе вашей модели и переменная выбора.
Деталь:
TabView(selection: $currentPage){
ForEach(guidelists){i in
эти две строки сообщают компилятору, что идентификатор для каждого элемента имеет тип UUID
(поскольку GuideList
является идентифицируемым, а id
имеет тип UUID
. Само по себе это нормально, но TabView имеет переменную выбора типа Int
(currentPage
— это Int
), поэтому он не работает Поэтому замена одного из обоих типов на другой решит проблему.
простой пример:
Измените свой код на:
struct GuideList: Identifiable, Hashable{//가이드리스트 구조체, 이미지와 설명넣기
let id: Int
let image: String
let explain: String
}
let guidelists = [
GuideList(id: 0, image: "image1",explain: "explain1."),
GuideList(id: 1, image: "image2",explain: "explain2." ),
GuideList(id: 2, image: "image3",explain: "explain3." )
]