我希望能够随机选择这些函数以供以后调用,这样我可以得到各种问题,例如加法问题,乘法问题等等。我以前使用过此方法,但仅用于特定的返回类型,并且使用的不是很多。我想知道是否有人知道如何制作它,以便可以多次使用它。我不想只调用函数的某些部分,因为我需要每个部分都可以使游戏正常工作。我仅用additionalQuestions测试了游戏,它的工作方式与我想要的一样。现在我希望能够更改问题,而不仅仅是添加问题,因此是随机函数。
// this is one of the functions I'm trying to randomly choose but all of them
// have the same returns
// function 1:
func additionQuestions() -> (String, Void, Void, Void) {
var sum : Int = 0
let firstNumberGen = Int.random(in: 0 ... 100)
let secondNumberGen = Int.random(in: 0...100)
questionLabel.text = "\(firstNumberGen) + \(secondNumberGen)"
makeQuestionVar = questionLabel.text!
print(makeQuestionVar)
sum = firstNumberGen + secondNumberGen
print(sum)
answerInString = trueCorrectAnswerButton.setTitle( String(sum), for: .normal)
if sum >= 20 {
falseAnswer1 = falseWrongAnswerButton.setTitle(String(sum - (Int.random(in: 1 ... 10))), for: .normal)
falseAnswer2 = falseWrongButton2.setTitle(String(sum - (Int.random(in: 1 ... 10))), for: .normal)
} else if sum < 20 && sum >= 10 {
falseAnswer1 = falseWrongAnswerButton.setTitle(String(sum - (Int.random(in: 1 ... 5))), for: .normal)
falseAnswer2 = falseWrongButton2.setTitle(String(sum - (Int.random(in: 1 ... 5))), for: .normal)
} else {
falseAnswer1 = falseWrongAnswerButton.setTitle(String(sum - (Int.random(in: 1 ... 2))), for: .normal)
falseAnswer2 = falseWrongButton2.setTitle(String(sum - (Int.random(in: 1 ... 2))), for: .normal)
}
return (makeQuestionVar, answerInString, falseAnswer1, falseAnswer2)
}
// this is the random function:
func randomQuestions () -> () -> (String, Void, Void, Void) {
let questions = [self.additionQuestions(), self.subtractionQuestions(), self.multiplicationQuestions()]
let random = Int(arc4random_uniform(UInt32(questions.count)))
return questions[random]
答案 0 :(得分:0)
好吧,我知道了,我真的不需要上面发布的内容。我不知道为什么我以前没有想到这个,但是……这就是我所拥有的:
func randomQuestions() {
let mathCase = Int.random(in: 0 ... 2)
if mathCase == 0 {
additionQuestions()
} else if mathCase == 1 {
subtractionQuestions()
} else if mathCase == 2 {
multiplicationQuestions()
}
}
这适用于我需要对我的应用做的事情
答案 1 :(得分:0)
您对自己的问题的回答...
func randomQuestions() {
let mathCase = Int.random(in: 0 ... 2)
if mathCase == 0 {
additionQuestions()
} else if mathCase == 1 {
subtractionQuestions()
} else if mathCase == 2 {
multiplicationQuestions()
}
}
...是解决此问题的糟糕方法。您应该以一种快速的方式,并且以一种可概括的方式来执行此操作。在Swift中,职能是一等公民。因此,您可以创建它们的数组并随机选择该数组的元素,然后调用它。然后您所有的硬编码名称和数字都消失了:
func callRandFunction(_ fs:[()->()]) {
if let f = fs.randomElement() {
f()
}
}
这是在特定用例中调用它的方法:
callRandFunction([additionQuestions, subtractionQuestions, multiplicationQuestions])