SwiftUI程序分摊费用WeSplit(二)

WeSplit(二)
加入第二个picker,这次选择Picker的风格为segmented风格,这样区别于之前人数选择的Picer,在Form内再增加一个Section

Section {
                    Picker("Tip percentage", selection: $tipPercentage) {
                        ForEach(0 ..< tipPercentages.count) {
                            Text("\(self.tipPercentages[$0])%")
                        }
                    }.pickerStyle(SegmentedPickerStyle())
                }

Picer提供所有的可供选择的小费比例,并将比列所在数组位置放入tipPercentage中.
运行程序
在这里插入图片描述
嗯,消费部分需要添加说明,清晰指出这些百分比是用作什么目的。方法很简单,只需要为Section加入header就可以了

Section(header: Text("小费比例")) {
                    ...
                }

运行程序

在这里插入图片描述

结算
进入最后一步,计算每个人需要支付的金额,然后显示到最后的位置。
首先定义一个变量,用于计算最后每人需要支付的金额,在struct内body之上

var totalPerPerson: Double {
    // 计算内容
    return 0
}

首先计算实际人数,通过picker选择的人数,反馈回numberOfPeople变量后得到的只是其所处的位置信息,即,ForEach是从2到100遍历的,所以当用户选择 “2”的时候,numberOfPeople的值其实为0,类似于数组的第一个位置。所以计算实际人数时,需要

let peopleCount = Double(numberOfPeople + 2)

同理计算小费比例

let tipSelection = Double(tipPercentages[tipPercentage])

将checkAmount从字符串转换为Double型的数据

let orderAmount = Double(checkAmount) ?? 0

?? 是swift比较常见的使用方式,如果转换成功则直接使用否则赋值0
最后计算

var totalPerPerson: Double {
    let peopleCount = Double(numberOfPeople + 2)
    let tipSelection = Double(tipPercentages[tipPercentage])
    let orderAmount = Double(checkAmount) ?? 0

    let tipValue = orderAmount / 100 * tipSelection
    let grandTotal = orderAmount + tipValue
    let amountPerPerson = grandTotal / peopleCount

    return amountPerPerson
}

最后提示一下,仅在非@State类型变量下,可以如此定义,如果是@State变量,则不能在定义时通过闭包完成计算,在SwiftUI2.0的时候增加了Onchange功能,可以用于部分替代此功能。
然后修改最后的显示

 Section {
                    Text("$\(checkAmount)")
                }

替换为

 Section {
                    Text("$\(checkAmount)")
                }

在这里插入图片描述
显示2位小数即可,所以修改显示部分

Text("$\(totalPerPerson, specifier: "%.2f")")

在这里插入图片描述
完成!!
使用SwiftUI真的很简单。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值