Swiftui 致命错误:访问状态<;装订<;字符串>&燃气轮机;外观
我在尝试让文本字段在SwiftUI中工作时遇到问题。 每当我尝试运行下面的代码时,就会出现Swiftui 致命错误:访问状态<;装订<;字符串>&燃气轮机;外观,swiftui,Swiftui,我在尝试让文本字段在SwiftUI中工作时遇到问题。 每当我尝试运行下面的代码时,就会出现致命错误:访问状态>外部视图.body 有人有什么建议吗 struct SearchRoot : View { @State var text: String = "" var body: some View { HStack { TextField($text, placeholder: Text("t
致命错误:访问状态>外部视图.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
属性“我忽略了在原始代码段中包含的内容…”-幸运的是,您可以编辑问题并包含省略的信息。“我忽略了在原始代码片段中包含的内容…”-好吧,幸运的是,您可以编辑问题并包含省略的信息。