这是在iOS14中预期的@State var行为还是错误?

时间:2020-09-18 08:34:29

标签: swiftui state ios14

当我在iOS14 sim或设备上运行针对iOS14编译的以下代码时,更新后的@State变量“ selection”不会传递到显示为.sheet(... 确切的代码可以在iOS 13.5 sim或13.6设备上正常运行

如果我在视图中的某个位置放置Text(“”)并显示要更新的变量,则代码将按预期在iOS 14上运行。

似乎只有当我显示该值时,.sheet get才会再次呈现,用正确的值更新MyView(tenum:selection)。

在下面的代码中,只需取消注释下面的行即可使其在iOS14中工作

// Text(“当前:(selection.rawValue)”)

import SwiftUI

struct ContentView:View {
    
    @State private var selection=MyView.TestEnum.ONE
    @State private var presentSheet=false
    
    var body: some View {
        VStack {
//            Text("Currently: \(selection.rawValue)")
            Button(action: {
                selection=MyView.TestEnum.TWO
                print("selecting: \(selection.rawValue)")
                presentSheet=true
            }, label: {
                Text("Select TWO")
            })
            .sheet(isPresented: $presentSheet, onDismiss: {
                print("dismissed")
            }) {
                MyView(tenum: selection)
            }
        }
    }
}

struct MyView:View {
    enum TestEnum: String, Codable {
        case ONE="ONE"
        case TWO="TWO"
    }
    var tenum:TestEnum
    
    var body: some View {
        Text("enum: \(tenum.rawValue)")
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

0 个答案:

没有答案