小编Nat*_*tin的帖子

NavigationSplitView 和 @State 的奇怪行为

我的应用程序中有一个 NavigationSplitView,我的详细视图中有一个在 init 中创建的 @State 变量。

当我从侧边栏中选择某些内容并呈现详细视图时,起初一切看起来都不错。但是,当我在侧边栏上选择不同的项目时,@state 变量的内容不会重新创建。

使用调试器,我可以看到每次在侧边栏中选择一个新项目时都会调用详细视图的 init,并且可以看到创建了 @State 变量。但当它实际渲染时,@State 变量仍然包含先前选择的值。

我已将这个问题简化为一个测试用例,我将粘贴在下面。详细信息视图中的顶部文本是从侧边栏传入的变量,第二行文本由@State变量生成。预期的行为是,如果我选择“一”,详细信息视图将显示“一”和“名称是一”。如果我选择“二”,详细视图将显示“二”和“名称是二”。

相反,如果我首先选择“one”,它会正确显示。但是当我选择“二”时,它显示“二”和“名称是一”。

请注意,如果我选择“二”作为启动应用程序后执行的第一件事,它会正确显示“二”和“名称是二”,但是当我接下来单击“一”时,它将显示“一”和“名字是二”。所以状态变量被设置一次,然后就不会再改变,

这是示例代码和屏幕截图:

import SwiftUI

struct Item: Hashable, Identifiable {
    let id = UUID()
    let name: String
}

struct ContentView: View {
    
    @State private var selectedItem: Item.ID? = nil
    
    private let items = [Item(name: "one"), Item(name: "two"), Item(name: "three")]
    
    func itemForID(_ id: UUID?) -> Item? {
        guard let itemID = id else { return nil }
        return items.first(where: { item in
            item.id == itemID
        })
    } …
Run Code Online (Sandbox Code Playgroud)

swiftui

5
推荐指数
1
解决办法
816
查看次数

标签 统计

swiftui ×1