SwiftUI tabView pagetabviewstyle - кнопка «Далее» не работает

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()
}
}

Я хочу сделать кнопку для перехода на следующую страницу кнопка похоже не работает

Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
0
0
17
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Причиной того, что это не работает, является несоответствие типов в идентификаторе вашей модели и переменная выбора.


Деталь:

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." )
]

Другие вопросы по теме