Увеличение переменной в функции вызывает ошибку при предварительном просмотре (swiftui)
У меня есть этот код, внутри которого я вызываю функцию makeView, которая возвращает View, а в функции makeView я увеличиваю переменную id и передаю ее в View, но когда я это делаю, она показывает эту ошибку
«Обновление предварительного просмотра из SongsList_Previews в SongBook.app (2935) заняло более 5 секунд».
И что удивительно, когда я закомментировал строку «self.id += 1», все работает. Я новичок в SwiftUI, так что простите меня, если я упустил некоторую информацию.
struct SongsList: View {
@State private var id: Int = 0
var body: some View {
VStack{
NavigationView {
List(songs) {
song in NavigationLink(
destination: SongMainView(song: song)) {
makeView(song: song)
}
}
}
}
.frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity, alignment: .leading)
.background(Color.orange.opacity(0.2))
.edgesIgnoringSafeArea(.all)
}
func makeView(song: Song) -> SongsIndexView {
self.id += 1;
return SongsIndexView(song: song, id: self.id)
}
}
1 ответ
Решение
Переменная отмечена значком
@State
оболочка свойств.
@State private var id: Int = 0
Каждый раз, когда это значение изменяется, SwiftUI пытается обновить представление.
func makeView(song: Song) -> SongsIndexView {
self.id += 1;
return SongsIndexView(song: song, id: self.id)
}
Это вызывает бесконечный цикл вроде -
-
id = 1
, updateView (но теперь из-за) -
id = 2
, updateView (но теперьid = 3
из-заid += 1
)
Вы никогда не должны изменять состояние во время обновления представления.