簡體   English   中英

SwiftUI @State 奇怪的 WrappedValue 行為

[英]SwiftUI @State wierd wrappedValue behaviour

所以直截了當我有這個代碼:

struct DataModel {
    var option: String

}

struct ViewModel {
    var selected: String? = "1"
    var options = [DataModel(option: "1"), DataModel(option: "2"), DataModel(option: "3")]
}

struct ContentView: View {
    
    @State var viewModel: ViewModel
    
    var body: some View {
        VStack {
            Picker("test", selection: aBinder()) {
                ForEach(viewModel.options, id: \.option) { option in
                    Text(option.option)
                }
            }
            .background(Color.red)
        }
    }
    
    func aBinder() -> Binding<String?> {
        Binding<String?> {
            viewModel.selected
        } set: { value in
            $viewModel.selected.wrappedValue = value
            print($viewModel.selected.wrappedValue)
        }
    }
}

viewModel 中“selected”的值不會改變。

這有效:

struct DataModel {
    var option: String
}

struct ViewModel {
    var selected: String = "1"
    var options = [DataModel(option: "1"), DataModel(option: "2"), DataModel(option: "3")]
}

struct ContentView: View {
    
    @State var viewModel: ViewModel
    
    var body: some View {
        VStack {
            Picker("test", selection: $viewModel.selected) {
                ForEach(viewModel.options, id: \.option) { option in
                    Text(option.option)
                }
            }
            
            Button("press me", action: { print(viewModel.selected) })
        }
    }
}

但這沒有任何意義。 在這兩種情況下,我都使用綁定來存儲當前值。 到底是怎么回事? 我對 swiftUI 很陌生,所以我可能錯過了某些東西的工作原理。

提前致謝

selected不匹配的類型是StringoptionsDataModel 類型必須完全匹配。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM