之前有个生成乘法的挑战被我搁置了,现在重新做一下。

对于这个挑战我主要的难点是抛弃了曾经在python中经常使用的字典概念(我是新手),使用结构和点记法来进行编程。

其中有几次白屏,后来发现是因为自己对于数量的判断上没有写好。当循环到一个不存在的数据上时就会停止工作,白屏。

代码

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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
//
// ContentView.swift
// ChallengeFor35
//
// Created by 张洪Hoo on 2020/4/5.
// Copyright © 2020 张洪Hoo. All rights reserved.
//

import SwiftUI

struct ContentView: View {
@State var xnumber = [Multiplication(multiplierA: 1, multiplierB: 1)].shuffled()
@State var questionNum = 5 //出题数量
@State var xchoose = 1 //数字上限


var body: some View {
NavigationView {
Form {
VStack {
Stepper(value: $xchoose, in: 1 ... 12) {
Text("乘法数字上限为 \(self.xchoose)")
}
}

VStack(alignment: .leading) {
Text("请选择出题数量")

Picker(selection: $questionNum, label: Text("生成的问题数")) {
Text("5").tag(5)
Text("10").tag(10)
Text("20").tag(20)
Text("全部").tag(4096)
}.pickerStyle(SegmentedPickerStyle())

}

Section(header: Text("题目列表")) {
// ForEach(self.xnumber) { item in
// Text("\(item.multiplierA) X \(item.multiplierB)")
// }

if questionNum < xnumber.count {
ForEach(0 ..< self.questionNum, id: \.self){ item in
Text("\(self.xnumber[item].multiplierA) X \(self.xnumber[item].multiplierB)")
}
}else{
ForEach(self.xnumber) { item in
Text("\(item.multiplierA) X \(item.multiplierB)")
}
}


}


}



.navigationBarTitle(Text("乘法考题生成表"))
.navigationBarItems(trailing: Button(action: {
self.questionMaker(maxnum: self.xchoose, in: self.questionNum)
self.chooseQuestion()

}) {
Text("生成")
})
}


}

func questionMaker(maxnum: Int, in questions: Int) {
self.xnumber = [Multiplication]()

for a in 1 ... maxnum {
for b in 1 ... maxnum {
self.xnumber.append(Multiplication(multiplierA: a, multiplierB: b))

}
}
}

func chooseQuestion() {
xnumber.shuffle()
}

}

struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}

struct Multiplication: Identifiable {
var id = UUID()
var multiplierA: Int
var multiplierB: Int
var answer: Int {
multiplierA * multiplierB
}
}

明天继续优化一下,增加答案显示等等。这个项目也将开源到GitHub,算是一个小挑战作品了。

SwiftPlayground 进度