gpt4 book ai didi

ios - 为什么自定义 SwiftUI View 不会对状态更改使用react

转载 作者:行者123 更新时间:2023-12-04 07:24:32 26 4
gpt4 key购买 nike

我在 SwiftUI 中的许多不同的自定义 View 中都遇到过这个问题,那么为什么诸如

struct HeaderText: View {
@State var text: String
@State var color: Color

var body: some View {
Text(text)
.font(.custom("Gilroy-SemiBold", size: 20))
.foregroundColor(color)
}
}
text 时不自动更新或 color变化。例如,如果我有一个 View ,例如
struct ContentView: View {
@State var text = "Hello"

var body: some View {
VStack {
HeaderText(text: self.text, color: .black)
Button("Change Text") {
self.text = "Goodbye"
}
}
}
}
我原以为 View 会使用新文本进行更新,但事实并非如此。我知道您可以使用 @Binding 来完成此操作,但我正在寻找一个更优雅的解决方案,类似于 Text作品。我只是使用这些 View 和 structs举个例子,所以我知道这些可能不是一般的最佳实践。
感谢您的帮助!

最佳答案

SwiftUI 是一种函数式编程。 Struct s 是值类型(不是引用类型)。结构通常是不可变的。
您可以简单地拥有 let s 在您的 subview 结构中。
为什么 - SwiftUI 在 @State 时重新创建您的 View 改变而不是修改它。这是通过调用 body 来完成的。再次。

    struct HeaderText: View {
let text: String //<= here
let color: Color //<- here

var body: some View {
Text(text)
.font(.custom("Gilroy-SemiBold", size: 20))
.foregroundColor(color)
}
}

为什么不问题中的代码工作,
这是因为这些状态变量使用给定的值(在父 View 中)进行初始化,并且没有对 @state 进行任何更改。这是在 subview 内(HeaderText) 因为 @State可以在 View 本身内部进行更改。

关于ios - 为什么自定义 SwiftUI View 不会对状态更改使用react,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68288674/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com