我真的不知道如何整理答案。 我有许多按钮(buttonA,buttonB,buttonC)和各种答案
this.baseUrl + 'organizations/' + id
这个答案我必须放在每个按钮上,但不要放在同一位置。正确答案始终位于第一位置,因此在此刻,buttonA中的每个正确答案都是正确的。
错误1:类型“ RandomNumberGenerator.Protocol”不符合“ RandomNumberGenerator”;只有struct / enum / class类型可以符合协议错误2:无法将'RandomNumberGenerator.Protocol'类型的不可变值作为inout参数传递
我以前从未使用过洗牌。很抱歉这个原始问题,但是我很快就开始了。谢谢
答案 0 :(得分:3)
RandomNumberGenerator
是一个协议,但是从字面上看,您不会将其用作参数,而是可能会提供符合该协议的对象。
但是您真的不需要为此担心。只需直接使用shuffled
(或randomElement
),而无需提供随机数生成器。如果您只想改组这三个子数组中的每一个,则可以这样做:
let answers = [
["30","20","10"],
["cat", "dog", "butterfly"],
["flower", "sun", "tree"]
].map { $0.shuffled() }
这将产生如下内容:
[
["20", "10", "30"],
["dog", "cat", "butterfly"],
["tree", "sun", "flower"]
]
然后您可以执行以下操作:
for (index, button) in buttons.enumerated() {
button.setTitle(answers[numberOfQuestion][index], for: .normal)
}
请注意,我们在进入按钮循环之前已经将随机播放移动了,因为这将确保不会重复回答。但是,如果您想让答案重复,您可能根本不会洗牌,而只是抓住一个随机元素:
let answers = [
["30", "20", "10"],
["cat", "dog", "butterfly"],
["flower", "sun", "tree"]
]
for button in buttons {
button.setTitle(answers[numberOfQuestion].randomElement(), for: .normal)
}
答案 1 :(得分:2)
let buttons = [UIButton(), UIButton(), UIButton()]
let answers = [
["30","20","10"],
["cat", "dog", "butterfly"],
["flower", "sun", "tree"]
]
let shuffledAnswers = answers.map { $0.shuffled() }
buttons.enumerated().forEach {
let answer = shuffledAnswers[$0.offset].first
$0.element.setTitle(answer, for: .normal)
}