Swiftui 致命错误:访问状态<;装订<;字符串>&燃气轮机;外观

Swiftui 致命错误:访问状态<;装订<;字符串>&燃气轮机;外观,swiftui,Swiftui,我在尝试让文本字段在SwiftUI中工作时遇到问题。 每当我尝试运行下面的代码时,就会出现致命错误:访问状态>外部视图.body 有人有什么建议吗 struct SearchRoot : View { @State var text: String = "" var body: some View { HStack { TextField($text, placeholder: Text("t

我在尝试让文本字段在SwiftUI中工作时遇到问题。 每当我尝试运行下面的代码时,就会出现
致命错误:访问状态>外部视图.body

有人有什么建议吗

struct SearchRoot : View {

    @State var text: String = ""

    var body: some View {
        HStack {
            TextField($text,
                      placeholder: Text("type something here..."))
            Button(action: {
                // Closure will be called once user taps your button
                print(self.$text)
            }) {
                Text("SEND")
            }
        }
    }
}
我正在macOS 10.15测试版(19A471t)上运行Xcode 11.0测试版(11M336w)

编辑:简化代码,仍然得到相同的错误

struct SearchRoot : View {

    @State var text: String = ""

    var body: some View {
            TextField($text,
                      placeholder: Text("type something here..."))
    }
}

如果
$
运算符在
正文
之外的
视图
中使用,编译器将发出错误。 按钮初始值设定项定义为:

初始化(操作:@escaping()->Void,@ViewBuilder标签:()->label)

您正在转义闭包中使用
$
,在代码的第一个片段中

这意味着
操作
可能比
主体
寿命长(转义),因此会出现错误


第二个代码段对我来说编译得很好。

如果
$
运算符在
正文
之外的
视图中使用,编译器将发出错误。
按钮初始值设定项定义为:

初始化(操作:@escaping()->Void,@ViewBuilder标签:()->label)

您正在转义闭包中使用
$
,在代码的第一个片段中

这意味着
操作
可能比
主体
寿命长(转义),因此会出现错误


第二段代码对我来说编译得很好。

Eureka!SwiftUI想要一个单一的真相来源

我在最初的代码片段中忽略了一点,那就是这个结构在一个选项卡式应用程序中

为了解决这个问题,我需要在创建顶级选项卡视图的结构中定义
@State var text:String=”“
,然后在SearchRoot中使用$Binding

我不确定这是按设计工作还是仅仅是beta 1版本,但这是目前的工作方式

struct ContentView : View {
    @State private var selection = 0
    @State private var text: String = "searching ex"

    var body: some View {
        TabbedView(selection: $selection){
            ShoppingListRoot().body.tabItemLabel(Text("Cart")).tag(0)
            SearchRoot(text: $text).body.tabItemLabel(Text("Search")).tag(1)
            StoreRoot().body.tabItemLabel(Text("Store")).tag(2)
            BudgetRoot().body
                .tabItemLabel(Text("Budget"))
                .tag(3)
            SettingsRoot().body
                .tabItemLabel(Text("Settings"))
                .tag(4)

        }
    }
}

尤里卡!SwiftUI想要一个单一的真相来源

我在最初的代码片段中忽略了一点,那就是这个结构在一个选项卡式应用程序中

为了解决这个问题,我需要在创建顶级选项卡视图的结构中定义
@State var text:String=”“
,然后在SearchRoot中使用$Binding

我不确定这是按设计工作还是仅仅是beta 1版本,但这是目前的工作方式

struct ContentView : View {
    @State private var selection = 0
    @State private var text: String = "searching ex"

    var body: some View {
        TabbedView(selection: $selection){
            ShoppingListRoot().body.tabItemLabel(Text("Cart")).tag(0)
            SearchRoot(text: $text).body.tabItemLabel(Text("Search")).tag(1)
            StoreRoot().body.tabItemLabel(Text("Store")).tag(2)
            BudgetRoot().body
                .tabItemLabel(Text("Budget"))
                .tag(3)
            SettingsRoot().body
                .tabItemLabel(Text("Settings"))
                .tag(4)

        }
    }
}

他们两个都试过。即使是第一个版本也是为Meth编译的。iOS 13.0上SwiftUI在访问视图主体外的状态/环境方面的行为在iOS 13.1以后发生了变化,现在您可以从引用View@JAHelia你有官方笔记的链接吗?@hbk文档中没有提到,我是通过trial@JAHelia对我也可以证实这一点,只是想可能有一些关于这一变化的文件。不管怎样,谢谢。两个都试了。即使是第一个版本也是为Meth编译的。iOS 13.0上SwiftUI在访问视图主体外的状态/环境方面的行为在iOS 13.1以后发生了变化,现在您可以从引用View@JAHelia你有官方笔记的链接吗?@hbk文档中没有提到,我是通过trial@JAHelia对我也可以证实这一点,只是想可能有一些关于这一变化的文件。无论如何,谢谢。第一个也编译给我,让我纠正你。您可以在
@转义
正文中使用bindable对象(在配置
列表
时会发生这种情况),但应小心操作,在这种情况下,不需要使用
$
符号,因为
$
通常用于将属性
BindingObject
State
传递到子视图,并保存到
@Bindable
属性。第一个属性也会编译给我,让我纠正您的错误。您可以在
@转义
正文中使用bindable对象(在配置
列表
时会发生这种情况),但应小心操作,在这种情况下,不需要使用
$
符号,因为
$
通常用于将属性
BindingObject
State
传递到子视图中,并保存到
@Bindable
属性“我忽略了在原始代码段中包含的内容…”-幸运的是,您可以编辑问题并包含省略的信息。“我忽略了在原始代码片段中包含的内容…”-好吧,幸运的是,您可以编辑问题并包含省略的信息。