如何解开可选的@State以用于调用需要在swiftui中绑定的东西[重复]

Posted

技术标签:

【中文标题】如何解开可选的@State以用于调用需要在swiftui中绑定的东西[重复]【英文标题】:How to unwrap an optional @State to be used in a call to something requiring a Binding in swiftui [duplicate] 【发布时间】:2020-12-26 17:48:40 【问题描述】:

如何解开可选的@State 以用作绑定参数?

import SwiftUI

struct ContentView: View 
    @State var testString = "Hello"
    var body: some View 
        TestView(test: testString)
    


struct TestView : View 
    @State var test : String?
    var body: some View 
       TextField("Test", text: $test)
    


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

这是我在 TextField 调用中收到的编译器错误。

Cannot convert value of type 'Binding<String?>' to expected argument type 'Binding<String>'

【问题讨论】:

***.com/questions/57021722/swiftui-optional-textfield 您的问题看起来不正确,您的意思是说 ContentView 中的 testString 是可选的,并且 TestView 中的测试被声明为 @Binding 而不是 @State? 【参考方案1】:

在这种情况下,我们应该使用Binding

struct ContentView: View 
    @State var testString = "Hello"
    var body: some View 
        TestView(test: $testString)
    


struct TestView : View 
    @Binding var test : String
    var body: some View 
       TextField("Test", text: $test)
    

【讨论】:

是的,但我需要参数是 TestView 的可选参数。 问题中显示的场景没有描述,如果您想要准确的答案,您必须提供更真实的代码。请注意,@cora 提供的参考资料提供了许多可能的变体,以适应此答案以避免重复。【参考方案2】:

这是似乎可行的单行解决方案。

TextField("Test", text: Binding($test)!)

所以新的结构是这样的

struct TestView : View 
    @State var test : String?
    var body: some View 
        VStack 
            TextField("Test", text: Binding($test)!)
            Text(test!)
        
    

【讨论】:

在此视图的文本字段中输入一些文本后,ContentView 中的 testString 的值是多少? ContentView 中的值不会改变,但在我的示例中这很好。我只是想获取一个传入的可选参数,以便在另一个需要绑定值的视图中使用。

以上是关于如何解开可选的@State以用于调用需要在swiftui中绑定的东西[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Swift 3 更好的方式来解开一个可选的

如何使用警卫同时解开 Swift 可选和强制类型转换?

如何检查可选的@ViewBuilder 内容

15.容错机制Checkpoint和State执行流程状态后端/存储介质State状态后端/State存储介质可选的状态存储方式状态恢复和重启策略自动重启策略和恢复Savepoint

15.容错机制Checkpoint和State执行流程状态后端/存储介质State状态后端/State存储介质可选的状态存储方式状态恢复和重启策略自动重启策略和恢复Savepoint

setState详解