You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SwiftUI对象的String属性不显示在Text中,如何修改对象内的字符串?

问题1 解决方案

你当前代码中Text(Task(id: 0).taskName)的写法是手动初始化了一个全新的Task实例,并非存储在ModelData中的id为0的原有对象。新实例的taskName会走默认空值,所以无法展示内容。
正确写法是从modelData的tasks数组中筛选出id为0的对象:

// ContentView中替换原有的Text行
if let task0 = modelData.tasks.first(where: { $0.id == 0 }) {
    Text(task0.taskName)
}
问题2 解决方案

你的理解正确,当前写法修改的只是display2里本地@State修饰的副本,不会影响原对象。要修改原对象推荐使用更符合SwiftUI数据流的Binding方案:

  1. 把display2的@State改成@Binding
struct display2: View{
    @Binding var task:Task // 修改为@Binding,接收外部传入的对象绑定
    var body: some View {
        TextField("New task",text: $task.taskName)
    }
}
  1. 在ContentView中传递modelData里对应对象的绑定
struct ContentView: View {
    @EnvironmentObject var modelData: ModelData
    var body: some View {
        VStack{
            if let index0 = modelData.tasks.firstIndex(where: { $0.id == 0 }) {
                Text(modelData.tasks[index0].taskName)
                // 传入对应对象的绑定
                display2(task: $modelData.tasks[index0])
            }
        }
    }
}

修改后在display2中对task的操作会直接同步到modelData的原对象上。

内容的提问来源于stack exchange,提问作者swiftNewb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 23:54:02