Erstellen Sie ein Array von Indizes. Entfernen Sie einen der Indizes aus dem Array und verwenden Sie diesen, um eine Farbe zu holen.
Etwas wie folgt aus:
var colorArray = [
(UIColor.redColor(), "red"),
(UIColor.greenColor(), "green"),
(UIColor.blueColor(), "blue"),
(UIColor.yellowColor(), "yellow"),
(UIColor.orangeColor(), "orange"),
(UIColor.lightGrayColor(), "grey")]
var indexes = [Int]();
func randomItem() -> UIColor
{
if indexes.count == 0
{
print("Filling indexes array")
indexes = Array(0..< colorArray.count)
}
let randomIndex = Int(arc4random_uniform(UInt32(indexes.count)))
let anIndex = indexes.removeAtIndex(randomIndex)
return colorArray[anIndex].0;
}
Der obige Code erstellt ein Array indexes
. Die Funktion randomItem
prüft, ob indexes
leer ist. Wenn dies der Fall ist, füllt es sie mit Indexwerten von 0 bis colorArray.count - 1
.
Es nimmt dann eine Zufallszahl im indexes
Array entfernt der Wert bei diesem Index in dem Array indexes
, und verwendet sie, um ein Objekt aus dem colorArray
zu holen und zurückzusenden. (Es entfernt nicht Objekte aus den colorArray
. Es indirection verwendet, und entfernt Objekte aus der indexesArray, die zunächst einen Indexwert in für jeden Eintrag enthält Ihr colorArray
.
Der ein Fehler in der oben ist, dass, nachdem Sie holen das letzte Element von indexArray, füllen Sie es mit einem vollständigen Satz von Indizes, und es ist möglich, dass die nächste Farbe, die Sie aus dem neu bevölkerten Array erhalten wird die gleiche wie die letzte sein wird
Es ist möglich, extra hinzuzufügen Logik, um dies zu vermeiden
Sie könnten eine Reihe von ausgewählten Farben speichern oder Indexe und wenn die Farbe oder der Index im Array überprüft wird, wenn die Schaltfläche berührt wird. – kye
gibt es viele schöne und klare Lösungen. manchmal ist das Einfachste das Beste. Ich empfehle Ihnen Achis Lösung. Der Grund, warum diese Arbeit ist, dass arc4random_uniform Strom der Zahlen nicht nur zufällig, sondern auch gleichmäßig erzeugt. – user3441734