通过传入的值更新 SwiftUI @State 变量不起作用? (附代码)
updating SwiftUI @State variable by value passed in not working? (code attached)
在下面的代码中 运行 之后,我看到第一行的文本是 "xxxxxxxx" 而不是 "Initial Value we Want"。 gcRow 初始化程序中的“$strValue.wrappedValue = tempStr”行似乎不起作用?
问题 - 如何更正以便我可以正确地将子视图的初始值传递给它,并且它正确使用它?
游乐场代码:
import SwiftUI
import PlaygroundSupport
struct gcRow : View {
@State var strValue : String = "xxxxxxxx"
init(tempStr : String) {
$strValue.wrappedValue = tempStr // <== DOESN'T SEEM TO WORK
}
var body : some View {
HStack {
Text(strValue)
}
}
}
struct GCParentView: View {
var body: some View {
VStack {
List {
gcRow(tempStr: "Initial Value we Want")
}
}
}
}
let gcParentView = GCParentView()
PlaygroundPage.current.liveView = UIHostingController(rootView: gcParentView)
Image/Snapshop 我在启动后看到的内容:
你必须使用这个:
init(tempStr: String) {
_strValue = State(initialValue: tempStr)
}
在 swiftUI 中,不允许在初始化程序中更改 @State 变量。正确的做法是去掉默认值,在初始化器里面初始化。
固定游乐场代码
import SwiftUI
import PlaygroundSupport
struct gcRow : View {
@State var strValue: String
init(tempStr: String) {
_strValue = State(initialValue: tempStr)
}
var body : some View {
HStack {
Text(strValue)
}
}
}
struct GCParentView: View {
var body: some View {
VStack {
List {
gcRow(tempStr: "Initial Value we Want")
}
}
}
}
let gcParentView = GCParentView()
PlaygroundPage.current.liveView = UIHostingController(rootView: gcParentView)
在下面的代码中 运行 之后,我看到第一行的文本是 "xxxxxxxx" 而不是 "Initial Value we Want"。 gcRow 初始化程序中的“$strValue.wrappedValue = tempStr”行似乎不起作用?
问题 - 如何更正以便我可以正确地将子视图的初始值传递给它,并且它正确使用它?
游乐场代码:
import SwiftUI
import PlaygroundSupport
struct gcRow : View {
@State var strValue : String = "xxxxxxxx"
init(tempStr : String) {
$strValue.wrappedValue = tempStr // <== DOESN'T SEEM TO WORK
}
var body : some View {
HStack {
Text(strValue)
}
}
}
struct GCParentView: View {
var body: some View {
VStack {
List {
gcRow(tempStr: "Initial Value we Want")
}
}
}
}
let gcParentView = GCParentView()
PlaygroundPage.current.liveView = UIHostingController(rootView: gcParentView)
Image/Snapshop 我在启动后看到的内容:
你必须使用这个:
init(tempStr: String) {
_strValue = State(initialValue: tempStr)
}
在 swiftUI 中,不允许在初始化程序中更改 @State 变量。正确的做法是去掉默认值,在初始化器里面初始化。
固定游乐场代码
import SwiftUI
import PlaygroundSupport
struct gcRow : View {
@State var strValue: String
init(tempStr: String) {
_strValue = State(initialValue: tempStr)
}
var body : some View {
HStack {
Text(strValue)
}
}
}
struct GCParentView: View {
var body: some View {
VStack {
List {
gcRow(tempStr: "Initial Value we Want")
}
}
}
}
let gcParentView = GCParentView()
PlaygroundPage.current.liveView = UIHostingController(rootView: gcParentView)