在函数中增加变量会在预览时产生错误(swiftui)
Incrementing the variable in a function is creating error while preview (swiftui)
我在这段代码中调用了 returns 视图的“makeView”函数,在 makeView 函数中我递增了变量“id”并将其传递给视图,但是当我这样做时它显示了这个错误
“在 SongBook.app (2935) 中更新来自 SongsList_Previews 的预览用时超过 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)
}
}
变量被标记为@State
属性 wrapper.
@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
因为 id += 1
)
id = 2
, updateView(但现在 id = 3
因为 id += 1
)
永远不要在更新视图时改变状态。
我在这段代码中调用了 returns 视图的“makeView”函数,在 makeView 函数中我递增了变量“id”并将其传递给视图,但是当我这样做时它显示了这个错误
“在 SongBook.app (2935) 中更新来自 SongsList_Previews 的预览用时超过 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)
}
}
变量被标记为@State
属性 wrapper.
@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
因为id += 1
)id = 2
, updateView(但现在id = 3
因为id += 1
)
永远不要在更新视图时改变状态。