swiftui - 如何将对象绑定中的属性作为正常状态变量传递给子视图
问题描述
我有一个对象绑定到模型的视图。现在我想提取一个子视图。当我在子视图上定义相同的对象绑定时,一切正常。但是由于子视图是一个原始视图,我希望只有一个状态变量而不是完整的对象绑定。
不幸的是,当模型的属性发生变化时,我的子视图不会更新。
一些代码(简化):
private struct ControlButtons : View {
@ObjectBinding var timerViewModel: TimerViewModel
var body: some View {
JumpBackButton(isDisabled: timerViewModel.isAtStart, jumpAction: { self.timerViewModel.jumpBack() })
}
}
struct JumpBackButton: View {
@State var isDisabled = false
var jumpAction: () -> Void
var body: some View {
Button(action: { self.jumpAction() }) {
Image(systemName: "backward.end")
}.buttonStyle(.plain).padding().disabled(isDisabled)
}
}
解决方案
@State
并非旨在传递任何值。事实上,Apple 建议我们将它们声明为私有,以避免犯这样的错误。
@State
变量旨在用作事实的来源。如果价值来自外部,那它就不是真实的来源!我建议您观看 WWDC2019 会议:使用 SwiftUI 的数据流。
如果您的视图需要来自外部的数据,则需要通过@Binding
、@ObjectBinding
或@EnvironmentOBject
推荐阅读
- include - Sequelize - 无法绑定多部分标识符
- react-native - 在 react-native 中,我们如何自动检测字符串中的链接和电话号码并在文本中突出显示它们
- python - 我想根据我的演讲刷新我的报告是否可以在 Power BI 中使用?
- java - Java 中的 Nats 请求/回复
- typescript - Apollo、Express、WS 会话未共享
- selenium - Selenium webdriver连接超时后如何清理等待请求
- java - h2o.xgboost 训练错误 java.lang.NullPointerException h2o 版本:3.26.0.2
- discord.js - 如何通过我自己的机器人使用音乐不和谐机器人
- vba - 使用定义的函数执行直到
- phabricator - 在 Phabricator 中实现甘特图