Arrays SwiftUI中数组的值和标题列表
我想创建一个列表,每个项目都有一个标题和一个值。数组中的值必须是可变的,以便用户在更改数组中的值时键入新值 目前,我试图通过实现新行而不是使用foreach来伪造它 有一个模型叫做Arrays SwiftUI中数组的值和标题列表,arrays,swift,list,foreach,swiftui,Arrays,Swift,List,Foreach,Swiftui,我想创建一个列表,每个项目都有一个标题和一个值。数组中的值必须是可变的,以便用户在更改数组中的值时键入新值 目前,我试图通过实现新行而不是使用foreach来伪造它 有一个模型叫做Affiliate,他几乎没有什么财产。每一个都有一个Double作为值。有些只是用来表示除以计算后的值 我想知道如何使用array和foreach,而不是独立创建每个var 我的镜头: struct Affiliate: Codable, Identifiable{ var id = UUID().
Affiliate
,他几乎没有什么财产。每一个都有一个Double
作为值。有些只是用来表示除以计算后的值
我想知道如何使用array和foreach,而不是独立创建每个var
我的镜头:
struct Affiliate: Codable, Identifiable{
var id = UUID().uuidString
var presentOfGoal: Double{
return actualSales / affiliateGoal
}
var hourlyDeal: Double {
return salesNumber / salePH
}
var hourlyOutput: Double{
return sumSales / workHours
}
var averageDeal: Double{
return sumSales / salesNumber
}
var averageIPT: Double {
return productsNum / salesNumber
}
var affiliateGoal: Double = 0
var actualSales: Double = 0
var salesNumber: Double = 0
var salePH: Double = 0
var sumSales: Double = 0
var workHours: Double = 0
var productsNum: Double = 0
var servicePoint: Double = 0
}
class AffiliateModel: ObservableObject{
@Published var affiliate: Affiliate
private var session = SessionStore.shared
init(){
affiliate = self.session.affiliate
}
}
标题:
enum AffiliateGoals: CaseIterable{
case affiliateGoal, actualSales, salesNumber, salePH, sumSales, workHours, productsNum, servicePoint, presentOfGoal, hourlyDeal, hourlyOutput, averageDeal, averageIPT
var title: String{
switch self{
case .affiliateGoal:
return "Affiliate Goal"
case .actualSales:
return "Actual Sales"
case .salesNumber:
return "Sales Number"
case .salePH:
return "Sales Per Hour"
case .sumSales:
return "Sales Summary"
case .workHours:
return "Work Hours"
case .productsNum:
return "Products Number"
case .servicePoint:
return "Service Point"
case .presentOfGoal:
return "Present Of Goal"
case .hourlyDeal:
return "Hourly Deal"
case .hourlyOutput:
return "Hourly Output"
case .averageDeal:
return "Average Deal"
case .averageIPT:
return "Average Items Per Transaction"
}
}
}
意见如下:
struct SetAffiliateGoals: View {
@EnvironmentObject var session: SessionStore
@ObservedObject var model: AffiliateModel
@Binding var show: Bool
@State private var showAlert = false
let goals = AffiliateGoals.self
var body: some View {
NavigationView{
Form{
Section(header: Text("Fulfill the details:").padding(.top)){
SetGoalRow(title: goals.affiliateGoal.title, value: $model.affiliate.affiliateGoal)
SetGoalRow(title: goals.actualSales.title, value: $model.affiliate.actualSales)
SetGoalRow(title: goals.salePH.title, value: $model.affiliate.salePH)
SetGoalRow(title: goals.salesNumber.title, value: $model.affiliate.salesNumber)
SetGoalRow(title: goals.sumSales.title, value: $model.affiliate.sumSales)
SetGoalRow(title: goals.workHours.title, value: $model.affiliate.workHours)
SetGoalRow(title: goals.productsNum.title, value: $model.affiliate.productsNum)
SetGoalRow(title: goals.servicePoint.title, value: $model.affiliate.servicePoint)
}
}
}
}
因为这些值是双精度的,所以我尝试创建一个绑定字符串,这样用户就不必在每次键入要应用的值时都按Return按钮
struct SetGoalRow: View{
@State var title: String
@Binding var value: Double
let numberFormatter = NumberFormatter()
var amountProxy: Binding<String> {
Binding<String>(
get: { String(format: "%.1f", value) },
set: {
if let value = numberFormatter.number(from: $0) {
self.value = value.doubleValue
}
}
)
}
var body: some View{
HStack(spacing: 8){
Text(LocalizedStringKey(title + ":"))
.layoutPriority(1)
TextField(LocalizedStringKey(""), text: amountProxy)
.keyboardType(.decimalPad)
.multilineTextAlignment(.trailing)
}
.lineLimit(1)
}
}
struct SetGoalRow:视图{
@状态变量标题:字符串
@绑定变量值:双精度
设numberFormatter=numberFormatter()
var amountProxy:绑定{
装订(
获取:{String(格式:%.1f',value)},
设置:{
如果let value=numberFormatter.number(from:$0){
self.value=value.doubleValue
}
}
)
}
var body:一些观点{
HStack(间距:8){
文本(LocalizedStringKey(标题+“:”))
.优先次序(1)
文本字段(LocalizedStringKey(“”),文本:amountProxy)
.键盘类型(.decimalPad)
.multilitextalignment(.training)
}
.lineLimit(1)
}
}
一个问题不清楚。。。我们要解决什么问题?如何实现相同的结果,而不是创建SetGoalRow
copy-paste。使用具有标题和值的数组。您可以向枚举中添加一个keyPath属性,该属性返回枚举中每个元素的模型键路径,但这会比当前解决方案的代码少吗?我正在寻找代码更少、更优雅的方法。