我想在一个视图上输入一些详细信息。
单击按钮“我们走吧”
它带我进入下一个视图。在下一个视图中,我将传递一些此信息并进行一些计算。
简单的部分。好的。现在对我来说最困难的部分。
你可以看到我进入了“5”号看台。我希望列表中的项目显示“第 1 号站、第 2 号站...直至第 5 号站”。然后我需要按“id”拉出列表项,并根据我稍后在文本字段中输入的内容计算一些内容,但正确现在这让我发疯。
代码: 数组:
struct Stand: Codable, Identifiable, Hashable {
var id = UUID()
let stand: String
var area: String
var speed: Int
var rf: Int
}
图像“图像 2”的代码:
struct Speeds1View: View {
let title: String
let productArea: String
let noStands: String
let billetArea: String
@Environment(\.dismiss) var dismiss
var standCount: Int {
let sc = Int(noStands) ?? 0
return sc
}
@State private var stand = [Stand]()
@State var txtspeedCurrent: String
@State private var rF = ""
@State private var standNo: Int = 0
@State private var rFCalculated: Int = 0
var body: some View {
NavigationStack{
ZStack{
List{
HStack(alignment: .center){
Spacer()
VStack(){
Text("# of Stands")
Text(self.noStands)
Text("Billet Area")
Text(self.billetArea)
Text("Product Area")
Text(self.productArea)
Text(" Reduction Ratio: \(RedRatio) : 1")
Text("Testing")
Text(" Ave. Area Red: \(AveAreaRed)%")
}
Spacer()
}
ForEach(0..<standCount, id: \.self) { standCount in
StandRowView(stand: "1", speedCurrent: $txtspeedCurrent, rfactor: rF)
}
.padding(.horizontal)
.listRowInsets(EdgeInsets())
.listRowSeparator(.hidden)
}
}
.onAppear(){
standList()
}
}
.navigationBarTitleDisplayMode(.inline)
.navigationTitle("Calculate Area, \(title)")
}
private func standList(){
self.standNo += 1
let u = Stand(id: UUID(), stand: "\(standNo)", area: "Area: \(1)", speed: 8, rf: rFCalculated)
self.stand.append(u)
}
}
我看到这个问题已经在评论中得到了回答,但为了完整起见,我添加了一个答案。 Benzy Neez 是正确的,问题是当您应该传入与实际
stand: "1"
循环相关的内容(例如 ForEach
)时,您却传入了 stand: "\(standCount + 1)"
。这是一个小小的挑剔,但如果您希望每个摊位根据其数量而独一无二,您可能应该使用摊位的编号作为 ID,如下所示:
struct Stand: Codable, Identifiable, Hashable {
var id: String {
return self.stand
}
let stand: String
var area: String
var speed: Int
var rf: Int
}
这将允许您使用展位的编号作为其 ID。如果结构体的属性想要唯一,那么最好使用结构体的属性作为 ID,而不是在已存储的唯一变量之外创建 UUID。
另一个建议,考虑创建一个 ViewModel 对象并使用
@StateObject
,而不是在状态中存储许多单独的对象。
struct SpeedsViewModel {
var stand = [Stand]()
var txtspeedCurrent: String
var rF = ""
var standNo: Int = 0
var rFCalculated: Int = 0
}
// ...
struct Speeds1View: View {
// ...
@StateObject viewModel: SpeedsViewModel
// ...
}