在函数中增加变量会在预览时产生错误(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)
}

这会导致无限循环,如 -

  1. id = 1, updateView(但现在 id = 2 因为 id += 1
  2. id = 2, updateView(但现在 id = 3 因为 id += 1

永远不要在更新视图时改变状态。