问题描述
我正在尝试改组数组并显示所有单词而不重复它们。 iv试了一会儿。我以为我可以使用该枚举,但是它不能正常工作,不确定为什么...有任何想法吗?
我的阵列
var fruitOptions = [
Fruit(id: 1,fruit:"?",name: "KIWI"),Fruit(id: 2,name: "APPLE"),Fruit(id: 3,name: "PEAR"),Fruit(id: 4,name: "ORANGE"),Fruit(id: 5,name: "STRAWBerry"),Fruit(id: 6,name: "WATERMELON"),Fruit(id: 7,name: "GRAPES"),Fruit(id: 8,name: "BANANA"),Fruit(id: 9,name: "CHERRY")
]
mutating func nextFruit() {
fruitOptions.shuffle()
while fruitOptions.count <= 8 {
if fruitNumber + 1 < fruitOptions.count {
// if !fruitOptions.contains(fruitOptions.capacity) {
fruitNumber += 1
//
// for (index,fruitOptions) in fruitOptions.enumerated() {
// if case fruitOptions.id = index + 0 {
// fruitNumber += 1
} else {
// fruitNumber = 0 // <- Makes a never ending app.!? :/
score = 0
}
}
}
}
解决方法
如果我对它的理解正确,那么您不应在每次致电nextFruit
时都洗牌。只需迭代一次,然后再遍历您的收藏集即可。我认为最简单的解决方案是存储当前水果的索引。在您的下一个水果方法中,检查索引是否等于零,如果为true,则将您的水果随机播放。在当前索引处获取水果并将其增加。如果索引等于水果数,则将其重置为零。像这样:
struct Fruit {
let id: Int
let fruit: Character
let name: String
}
游乐场测试:
var fruitOptions = [
Fruit(id: 1,fruit:"?",name: "KIWI"),Fruit(id: 2,name: "APPLE"),Fruit(id: 3,name: "PEAR"),Fruit(id: 4,name: "ORANGE"),Fruit(id: 5,name: "STRAWBERRY"),Fruit(id: 6,name: "WATERMELON"),Fruit(id: 7,name: "GRAPES"),Fruit(id: 8,name: "BANANA"),Fruit(id: 9,name: "CHERRY")]
var index = 0
func nextFruit() {
if index == 0 { fruitOptions.shuffle() }
print(fruitOptions[index])
index += 1
if index == fruitOptions.count {
print("end of fruits")
index = 0
}
}
nextFruit()
nextFruit()
nextFruit()
nextFruit()
nextFruit()
nextFruit()
nextFruit()
nextFruit()
nextFruit()
nextFruit()
nextFruit()
nextFruit()
nextFruit()
这将打印:
水果(id:5,水果:“?”,名称:“草莓”)
水果(编号:2,水果:“?”,名称:“ APPLE”)
水果(编号:4,水果:“?”,名称:“ ORANGE”)
水果(编号:9,水果:“?”,名称:“樱桃”)
水果(id:3,水果:“?”,名称:“ PEAR”)
水果(编号:6,水果:“?”,名称:“ WATERMELON”)
水果(编号:8,水果:“?”,名称:“ BANANA”)
水果(编号:1,水果:“?”,名称:“ KIWI”)
水果(编号:7,水果:“?”,名称:“ GRAPES”)
水果末
水果(编号:2,水果:“?”,名称:“ APPLE”)
水果(id:3,水果:“?”,名称:“ PEAR”)
水果(编号:1,水果:“?”,名称:“ KIWI”)
水果(id:4,水果:“?”,名称:“ ORANGE”)