这篇文章介绍了在SwiftUI中创建一个小费计算器的过程。文章中详细介绍了如何使用Picker、NavigationView、Form和Section等视图,以及如何在Double值中省略多余的小数。同时,文章也提供了完整的代码和参考资料。
此内容根据文章生成,并经过人工审核,仅用于文章内容的解释与总结
投诉 使用picker点击没反应
需要一个navigationview{}视图。
SwiftUI 想要做的事情-这也是为什么在行的右边缘添加了灰色显示指示器的原因-展示了一个带有选择器选项的新视图。为此,我们需要添加一个导航视图,该导航视图执行以下两项操作:在顶部留出一定空间以放置标题,并根据需要让iOS在新视图中滑动。
因此,直接在表单add之前NavigationView {,以及在表单的右括号之后添加另一个右括号。如果操作正确,则代码应如下所示:
1 2 3 4 5 6 7 var body: some View { NavigationView { Form { } } }
为Section添加header属性
1 2 3 4 5 6 7 Section (header: Text ("How much tip do you want to leave?" )) { Picker ("Tip percentage" , selection: $tipPercentage ) { ForEach (0 ..< tipPercentages.count) { Text ("\(self .tipPercentages[$0 ]) %" ) } }.pickerStyle(SegmentedPickerStyle ()) }
Double值如何省略多余的小数/减小精度(多余的0) 在完成之前,我们将修复界面的一个小问题,即总价的显示方式。我们使用a Double进行金额计算,这意味着Swift给我们的精度超出了我们所需的精度–我们希望看到的像是$ 25.50,而是看到了$ 25.500000。
我们可以通过使用SwiftUI添加的整洁的字符串插值功能来解决此问题:决定字符串内部数字格式的能力。这实际上可以追溯到C编程语言,因此语法起初有点奇怪:我们编写了一个称为说明符的字符串,其值为“%.2f”。这是C的语法,表示“两位数的浮点数”点数。”
粗略地说,“%f”表示“任何浮点数”,在我们的情况下,它将是整数。另一个选择是“%g”,它执行相同的操作,只是从末尾删除了不重要的零-$ 12.50将被写为$ 12.5。要求将“ .2”放入混音中是要求小数点后两位数字,而不管它们是什么。SwiftUI足够聪明,可以对它们进行智能舍入,因此我们仍然可以获得很好的精度。
你可以在Wikipedia上了解有关这些C样式格式说明符的更多信息:https : //en.wikipedia.org/wiki/Printf_format_string –我们不打算其他任何人,因此只要你想满足好奇心就可以在这里!
无论如何,我们希望每人使用我们的新格式说明符,所以请修改总文本视图为:
1 Text ("$\(totalPerPerson, specifier: "%.2f" ) " )
今日代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 import SwiftUIstruct ContentView : View { @State private var checkAmount = "" @State private var numberOfPeople = 2 @State private var tipPercentage = 2 let tipPercentages = [10 , 15 , 20 , 25 , 0 ] var totalPerPerson: Double { let peopleCount = Double (numberOfPeople + 2 ) let tipSelection = Double (tipPercentages[tipPercentage]) let orderAmount = Double (checkAmount) ?? 0 let tag1 = orderAmount * tipSelection / 100 let tag2 = tag1 + orderAmount let tag3 = tag2 / peopleCount return tag3 } var body: some View { NavigationView { Form { Section { Text ("Hello World" ) TextField ("Amount" , text: $checkAmount ) .keyboardType(.decimalPad) } Section { Picker ("选择人数" , selection: $numberOfPeople ) { ForEach (2 ..< 100 ) {number in Text ("\(number) people" ) } } } Section (header: Text ("How much tip do you want to leave?" )) { Picker ("Tip Percentage" , selection: $tipPercentage ) { ForEach (0 ..< tipPercentages.count) { Text ("\(self .tipPercentages[$0 ]) " ) } }.pickerStyle(SegmentedPickerStyle ()) } Section { Text ("$\(totalPerPerson, specifier: "%.2f" ) " ) } } .navigationBarTitle("WeSplit" ) } } } struct ContentView_Previews : PreviewProvider { static var previews: some View { ContentView () } }
参考资料 查看下一天的SwiftUI学习笔记
关于100days英文课程