Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/99.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在加载时将@State变量从UserDefaults更改为value,而不是更新选择器_Ios_Swift_Swiftui - Fatal编程技术网

Ios 在加载时将@State变量从UserDefaults更改为value,而不是更新选择器

Ios 在加载时将@State变量从UserDefaults更改为value,而不是更新选择器,ios,swift,swiftui,Ios,Swift,Swiftui,我试图在加载应用程序时使用存储在UserDefaults中的值更新@State变量,但我的选择器没有更新。这就是我所尝试的: struct ContentView: View { @State var selectedCanteen = 1 init() { let previousSelectedCanteen = UserDefaults.standard.string(forKey: "selectedCanteen") if let e

我试图在加载应用程序时使用存储在UserDefaults中的值更新@State变量,但我的选择器没有更新。这就是我所尝试的:

struct ContentView: View {

    @State var selectedCanteen = 1

    init() {
        let previousSelectedCanteen = UserDefaults.standard.string(forKey: "selectedCanteen")
        if let exist = previousSelectedCanteen {
            self.selectedCanteen = Int(exist) ?? 1
        }
    }

    var body: some View {
       Picker(selection: $selectedCanteen, label: Text("Testing...")) {
          Text("Stuff").tag(1)
          Text("Stuff 2").tag(2)
       }
    }
}

我来自react native,因此可能错过了Swift/SwiftUI中的一些基本概念。希望有人能把我引向正确的方向。

尝试使用以下方法

@State var selectedCanteen: Int

init() {
    let previousSelectedCanteen = UserDefaults.standard.string(forKey: "selectedCanteen")
    var initialValue = 1
    if let exist = previousSelectedCanteen {
        initialValue = Int(exist) ?? 1
    }
    _selectedCanteen = State<Int>(initialValue: initialValue)
}
@State var selected食堂:Int
init(){
让PreviousSelected食堂=UserDefaults.standard.string(forKey:“Selected食堂”)
var initialValue=1
如果让存在=先前选择的食堂{
初始值=整数(存在)??1
}
_Selected食堂=状态(初始值:初始值)
}

您能解释一下这种方法吗?
@State
在完成视图构造之前不会链接到所有者,因此在此期间其包装值不能更改,所以保留初始值(这是您观察到的)。我建议在构造函数中使用所需的值显式初始化
@State
。这是动态给出
@State
初始值的方法。谢谢,我在这里学习了下划线语法: