I'm trying to return random elements from an array with no repeated results, I haven't been able to find a solution for Swift 4.2 that uses the new RandomKit.
The current setup I have will return random titles for the "VowelFaceXX" IBOutlets, but will often repeat results. I want each IBOutlet to have a unique result.
I would also ideally like to be able to have more than 5 elements in the array at a later date, but staying with the 5 IBOutlets.
I have posted the code below:
import UIKit
import AVFoundation
class VowelsVC: UIViewController {
var audioPlayer : AVAudioPlayer?
var selectedSoundFileName : String = ""
var randomVowelIndex : Int = 0
var vowelArray = ["A", "E", "I", "O", "U"]
@IBOutlet weak var vowelFace01: UIButton!
@IBOutlet weak var vowelFace02: UIButton!
@IBOutlet weak var vowelFace03: UIButton!
@IBOutlet weak var vowelFace04: UIButton!
@IBOutlet weak var vowelFace05: UIButton!
func randomVowel() {
randomVowelIndex = Int.random(in: 0 ... 4)
}
func playAudio() {
let path = Bundle.main.path(forResource: selectedSoundFileName, ofType:nil)!
let url = URL(fileURLWithPath: path)
do {
audioPlayer = try AVAudioPlayer(contentsOf: url)
audioPlayer?.play()
} catch {
print("Couldn't load audio") }
}
@IBAction func dismissVowelVC(_ sender: Any) {
self.dismiss(animated: true, completion: nil)
}
override func viewDidLoad() {
super.viewDidLoad()
randomVowel()
selectedSoundFileName = "WhichOneIs.mp3"
playAudio()
let when = DispatchTime.now() + 1.7
DispatchQueue.main.asyncAfter(deadline: when) {
self.selectedSoundFileName = self.vowelArray[self.randomVowelIndex]+".mp3"
self.playAudio()
}
randomVowel()
vowelFace01.setTitle("\(vowelArray[randomVowelIndex])", for: .normal)
randomVowel()
vowelFace02.setTitle("\(vowelArray[randomVowelIndex])", for: .normal)
randomVowel()
vowelFace03.setTitle("\(vowelArray[randomVowelIndex])", for: .normal)
randomVowel()
vowelFace04.setTitle("\(vowelArray[randomVowelIndex])", for: .normal)
randomVowel()
vowelFace05.setTitle("\(vowelArray[randomVowelIndex])", for: .normal)
}
}
Aucun commentaire:
Enregistrer un commentaire