携手创作,一起生长!这是我参与「日新方案 8 月更文挑战」的第9天,点击检查活动详情。

承接上一章的内容,上一章节中,咱们完成了扣头核算器的款式部分

本章中,你将学会如何设计扣头核算器的逻辑,来完成扣头核算的功能

那么,让咱们开端吧。

类型转换

因为咱们Text文字部分是String类型的内容,而扣头核算涉及到数值核算,因而咱们需要做一个转换的办法,示例:

extension String {
var toFloat: Float {
return Float(self) ?? 0
}
}

上述代码中,咱们对String进行拓宽,咱们声明了一个办法toFloat,能够将String类型转换为Float类型。

扣头核算

扣头核算部分,咱们可依照扣头规矩,核算出最终的价格finalPrice,示例:

// 核算办法
func calculate() -> String {
if finalDiscount == "" {
finalPrice = priceStr
} else if finalDiscount == "买一送一" {
finalPrice = String(priceStr.toFloat / 2)
} else if finalDiscount == "买三送一" {
finalPrice = String(priceStr.toFloat * 3 / 4)
} else if finalDiscount == "第二瓶半价" {
finalPrice = String(priceStr.toFloat * 0.75)
} else if finalDiscount == "加一元多一件" {
finalPrice = String((priceStr.toFloat + 1) / 2)
}
return finalPrice
}

上述代码中,咱们声明了一个办法calculate,回来String类型的值。

finalDiscount扣头为空时,扣头价finalPrice等于priceStr输入的价格,其他规矩也是扣头价finalPricepriceStr输入的价格的对应数学公式。

只是因为涉及数值核算,咱们将priceStr输入的价格经过toFloat办法转为数值型,核算后再转换为String类型。

扣头核算办法最终return扣头价finalPrice的值。

交互操作

扣头核算办法设置好后,咱们能够开端核算了。咱们在priceInput视图中,当价格输入值onChange变化时,咱们当即更新输出的结果。示例:

// 价格输入
func priceInput() -> some View {
TextField("0.00", text: $priceStr)
    //躲藏了一些修饰符
.onChange(of: priceStr) { _ in
if priceStr != "" {
finalPrice = calculate()
} else {
finalPrice = "0.00"
}
}
}

上述代码中,咱们在TextField中绑定的priceStr输入值改变时,若priceStr输入值不为空,则将核算办法得出的结果calculate()赋值finalPrice扣头价。

priceStr输入值为空,则从头赋值finalPrice扣头价为空。

最终,当用户点击扣头价规矩时,咱们也需要当即核算最终的扣头价,示例:

// 扣头活动
func discountEvent() -> some View {
VStack(spacing: 10) {
ForEach(discountType.indices, id: \.self) { item in
Text(discountType[item])
        //躲藏了一些修饰符
.onTapGesture {
finalDiscount = discountType[item]
finalPrice = calculate()
}
}
}
}

躲藏键盘

因为扣头核算机有输入和挑选扣头两种操作,当TextField输入时会引发系统键盘,这样输入完成后可能存在遮挡扣头挑选的视图。

咱们能够创建一个躲藏键盘的办法,示例:

extension View {
func hideKeyboard() {
UIApplication.shared.sendAction(
#selector(UIResponder.resignFirstResponder),
to: nil,
from: nil,
for: nil
)
}
}

然后在ContentView视图中,当整个视图被点击时调用躲藏键盘的办法。示例:

var body: some View {
VStack {
titleView()
priceInput()
priceOutput()
Spacer()
discountEvent()
Spacer()
}
.padding()
.onTapGesture {
self.hideKeyboard()
}
}

就此,咱们就完成了整个项目的款式和逻辑。

项目展示

买东西太多折扣套路,使用SwiftUI搭建一个折扣计算器App帮你计算吧(下)

祝贺你,完成了整个项目的全部内容!

快来动手试试吧。

如果本专栏对你有帮助,无妨点赞、谈论、重视~