【发布时间】:2022-10-02 02:09:50
【问题描述】:
例如在这个应用程序上(我只是为了 D&D 的角色创建需要而创建的),当你按下 \"Roll\" 时,程序会滚动 3 次 \"d6 (6 面骰子)\" 并将它们相加,并添加对相应的“Stat”数组求和,它会执行 3 次,然后从数组中取最高值作为结果。
我这里的菜鸟功能代码在这里;
func rollStr() {
strArray.removeAll()
let r1 = Int.random(in: 1...6)
let r2 = Int.random(in: 1...6)
let r3 = Int.random(in: 1...6)
let r4 = Int.random(in: 1...6)
let r5 = Int.random(in: 1...6)
let r6 = Int.random(in: 1...6)
let r7 = Int.random(in: 1...6)
let r8 = Int.random(in: 1...6)
let r9 = Int.random(in: 1...6)
strArray.append(r1 + r2 + r3)
strArray.append(r4 + r5 + r6)
strArray.append(r7 + r8 + r9)
strStat = strArray.max()!
}
我没有设法只声明 3 个值并滚动 3 次,所以我决定用 9 个变量来做。无论如何,正如您在上面看到的,此函数中有 \"strArray\" 和 \"strStat\"。我必须为每个不同的统计数据编写 6 个该函数的副本。我尝试使用可编辑的功能,例如;
func rollStat(arrayNumber: Int, statNumber: Int) {
var allArrays = [strArray, dexArray, consArray, intArray, wisArray, chaArray]
var allStats = [strStat, dexStat, consStat, intStat, wisStat, chaStat]
allArrays[arrayNumber].removeAll()
let r1 = Int.random(in: 1...6)
let r2 = Int.random(in: 1...6)
let r3 = Int.random(in: 1...6)
let r4 = Int.random(in: 1...6)
let r5 = Int.random(in: 1...6)
let r6 = Int.random(in: 1...6)
let r7 = Int.random(in: 1...6)
let r8 = Int.random(in: 1...6)
let r9 = Int.random(in: 1...6)
allArrays[arrayNumber].append(r1 + r2 + r3)
allArrays[arrayNumber].append(r4 + r5 + r6)
allArrays[arrayNumber].append(r7 + r8 + r9)
allStats[statNumber] = allArrays[arrayNumber].max()!
}
并想将该函数称为 \"rollStat(arrayNumber: 1, statNumber: 1)\" 以使用一个基本函数来调用我需要的值,而不是使用多个副本,但我无法使其工作。我在这里做错了什么?
正如我所说的,我实现了我所需要的,该程序可以工作,但如果可能的话,我想知道只用一个函数来完成它的技巧。
如果您想了解有关前几行的任何信息,我将粘贴下面的所有代码。提前致谢。
struct ContentView: View {
// MARK: PROPERTY
@State private var strArray:[Int] = [0,0,0]
@State private var dexArray:[Int] = [0,0,0]
@State private var consArray:[Int] = [0,0,0]
@State private var intArray:[Int] = [0,0,0]
@State private var wisArray:[Int] = [0,0,0]
@State private var chaArray:[Int] = [0,0,0]
@State private var strStat = 0
@State private var dexStat = 0
@State private var consStat = 0
@State private var intStat = 0
@State private var wisStat = 0
@State private var chaStat = 0
// MARK: METHOD
func rollStr() {
strArray.removeAll()
let r1 = Int.random(in: 1...6)
let r2 = Int.random(in: 1...6)
let r3 = Int.random(in: 1...6)
let r4 = Int.random(in: 1...6)
let r5 = Int.random(in: 1...6)
let r6 = Int.random(in: 1...6)
let r7 = Int.random(in: 1...6)
let r8 = Int.random(in: 1...6)
let r9 = Int.random(in: 1...6)
strArray.append(r1 + r2 + r3)
strArray.append(r4 + r5 + r6)
strArray.append(r7 + r8 + r9)
strStat = strArray.max()!
}
func rollDex() {
dexArray.removeAll()
let r1 = Int.random(in: 1...6)
let r2 = Int.random(in: 1...6)
let r3 = Int.random(in: 1...6)
let r4 = Int.random(in: 1...6)
let r5 = Int.random(in: 1...6)
let r6 = Int.random(in: 1...6)
let r7 = Int.random(in: 1...6)
let r8 = Int.random(in: 1...6)
let r9 = Int.random(in: 1...6)
dexArray.append(r1 + r2 + r3)
dexArray.append(r4 + r5 + r6)
dexArray.append(r7 + r8 + r9)
dexStat = dexArray.max()!
}
func rollCons() {
consArray.removeAll()
let r1 = Int.random(in: 1...6)
let r2 = Int.random(in: 1...6)
let r3 = Int.random(in: 1...6)
let r4 = Int.random(in: 1...6)
let r5 = Int.random(in: 1...6)
let r6 = Int.random(in: 1...6)
let r7 = Int.random(in: 1...6)
let r8 = Int.random(in: 1...6)
let r9 = Int.random(in: 1...6)
consArray.append(r1 + r2 + r3)
consArray.append(r4 + r5 + r6)
consArray.append(r7 + r8 + r9)
consStat = consArray.max()!
}
func rollInt() {
intArray.removeAll()
let r1 = Int.random(in: 1...6)
let r2 = Int.random(in: 1...6)
let r3 = Int.random(in: 1...6)
let r4 = Int.random(in: 1...6)
let r5 = Int.random(in: 1...6)
let r6 = Int.random(in: 1...6)
let r7 = Int.random(in: 1...6)
let r8 = Int.random(in: 1...6)
let r9 = Int.random(in: 1...6)
intArray.append(r1 + r2 + r3)
intArray.append(r4 + r5 + r6)
intArray.append(r7 + r8 + r9)
intStat = intArray.max()!
}
func rollWis() {
wisArray.removeAll()
let r1 = Int.random(in: 1...6)
let r2 = Int.random(in: 1...6)
let r3 = Int.random(in: 1...6)
let r4 = Int.random(in: 1...6)
let r5 = Int.random(in: 1...6)
let r6 = Int.random(in: 1...6)
let r7 = Int.random(in: 1...6)
let r8 = Int.random(in: 1...6)
let r9 = Int.random(in: 1...6)
wisArray.append(r1 + r2 + r3)
wisArray.append(r4 + r5 + r6)
wisArray.append(r7 + r8 + r9)
wisStat = wisArray.max()!
}
func rollCha() {
chaArray.removeAll()
let r1 = Int.random(in: 1...6)
let r2 = Int.random(in: 1...6)
let r3 = Int.random(in: 1...6)
let r4 = Int.random(in: 1...6)
let r5 = Int.random(in: 1...6)
let r6 = Int.random(in: 1...6)
let r7 = Int.random(in: 1...6)
let r8 = Int.random(in: 1...6)
let r9 = Int.random(in: 1...6)
chaArray.append(r1 + r2 + r3)
chaArray.append(r4 + r5 + r6)
chaArray.append(r7 + r8 + r9)
chaStat = chaArray.max()!
}
func rollStat(arrayNumber: Int, statNumber: Int) {
var allArrays = [strArray, dexArray, consArray, intArray, wisArray, chaArray]
var allStats = [strStat, dexStat, consStat, intStat, wisStat, chaStat]
allArrays[arrayNumber].removeAll()
let r1 = Int.random(in: 1...6)
let r2 = Int.random(in: 1...6)
let r3 = Int.random(in: 1...6)
let r4 = Int.random(in: 1...6)
let r5 = Int.random(in: 1...6)
let r6 = Int.random(in: 1...6)
let r7 = Int.random(in: 1...6)
let r8 = Int.random(in: 1...6)
let r9 = Int.random(in: 1...6)
allArrays[arrayNumber].append(r1 + r2 + r3)
allArrays[arrayNumber].append(r4 + r5 + r6)
allArrays[arrayNumber].append(r7 + r8 + r9)
allStats[statNumber] = allArrays[arrayNumber].max()!
}
// MARK: BODY
var body: some View {
// MARK: STATS UI
VStack {
HStack(spacing: 10) {
VStack(spacing: 6) {
sixDiceView()
sixDiceView()
sixDiceView()
sixDiceView()
sixDiceView()
sixDiceView()
} //: Vstack
statNames()
ZStack {
VStack(spacing: 16) {
Text(String(strStat))
Text(String(dexStat))
Text(String(consStat))
Text(String(intStat))
Text(String(wisStat))
Text(String(chaStat))
}
VStack(spacing: 6) {
Capsule()
.fill(Color.blue.opacity(0.2))
.frame(width: 60, height: 30)
Capsule()
.fill(Color.blue.opacity(0.2))
.frame(width: 60, height: 30)
Capsule()
.fill(Color.blue.opacity(0.2))
.frame(width: 60, height: 30)
Capsule()
.fill(Color.blue.opacity(0.2))
.frame(width: 60, height: 30)
Capsule()
.fill(Color.blue.opacity(0.2))
.frame(width: 60, height: 30)
Capsule()
.fill(Color.blue.opacity(0.2))
.frame(width: 60, height: 30)
} //: VStack
} //: ZStack
ZStack {
rollsCapsule()
VStack(alignment: .leading, spacing: 16) {
Text(\"\\(strArray[0]),\\(strArray[1]),\\(strArray[2])\")
Text(\"\\(dexArray[0]),\\(dexArray[1]),\\(dexArray[2])\")
Text(\"\\(consArray[0]),\\(consArray[1]),\\(consArray[2])\")
Text(\"\\(intArray[0]),\\(intArray[1]),\\(intArray[2])\")
Text(\"\\(wisArray[0]),\\(wisArray[1]),\\(wisArray[2])\")
Text(\"\\(chaArray[0]),\\(chaArray[1]),\\(chaArray[2])\")
} //: VStack
} //: ZStack
} //: HStack
// MARK: BUTTON ROLL
Button(action: {
rollStr()
rollDex()
rollCons()
rollInt()
rollWis()
rollCha()
}) {
rollButton()
} //: BUTTON
} //: VStack
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
}
标签: swiftui