【发布时间】:2021-10-24 02:30:22
【问题描述】:
我对 Swift 编程非常陌生。所以我试图想出一个时间管理程序。我已经发布了一些从我的项目中派生的代码,这些代码正在进行中,我正在尝试解决一些由于我对 Swift 和 SwiftUI 缺乏知识而遇到的问题。我想在这里问两个问题,但如果您只有其中一个问题的答案,我将不胜感激。
因此,在我的 ContentView 中,我尝试使用 VStack 中的 Text 显示 ID 为 0 的对象的 taskName - 但是,它没有显示,我不确定原因。我可以通过将它放在 String 方法中来显示 taskLength,但是当我尝试显示它时没有出现 taskName。
我还尝试更改直接从 display2 传递到 display2 的 Task(id: 0) 的 taskName,但我不确定 Task(id: 0) 的 taskName 是否实际上正在更改, 或者只是 display2 中 @State var task:Task 的 taskName 正在改变——根据我的直觉,我认为后一种情况实际上正在发生。那么有没有办法直接从display2编辑Task(id: 0)的taskName?
import SwiftUI
import Foundation
import Combine
struct Task: Hashable, Codable, Identifiable {
var id: Int
var taskName: String = ""
var taskLength: Int = 0
var isBreak : Bool = false
}
class ModelData : ObservableObject{
@Published var tasks: [Task] = [
Task(id: 0,taskName: "Test", taskLength: 34, isBreak: false),
Task(id: 1,taskName: "Math", taskLength: 30, isBreak: false),
Task(id: 2,taskName: "Science", taskLength: 40, isBreak: false)
]
}
struct ContentView: View {
@EnvironmentObject var modelData: ModelData
var body: some View {
VStack{
Text(Task(id: 0).taskName)
display2(task:Task(id: 0))
}
}
}
struct display2: View{
@State var task:Task
var body: some View {
TextField("New task",text: $task.taskName)
}
}
【问题讨论】:
标签: arrays swift object swiftui