私はint
Sなど(000〜999)999番号を持っている、と彼らはすべてのUILabel
に印刷されている、私もUILabel
の値がupdateCurrentValue
として更新されますと、すべての数字が発表されなければなりません私は発表function
を行うことUIButton
を押すと、数字の音がAVFoundation
と(例えば)発表のためのコードを介してインポートされた数15は以下のとおりです。スウィフト:多機能の問題
if currentValue == 15 {
Sound15?.play()
}
は、今私がそのコードを探していますすべての999の番号のためにfunction
を作ることは時間の無駄になるので、何百ものために容易になります。何百というもののvalue
しか与えられていないのですが、自動的に残りの数字はfunc
になります。私は誰かが答えることができるように十分に明確にすることができることを願っています。これまで私がこれまでに持っていたことは次のとおりです。
import UIKit
import AVFoundation
class ViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate {
var Sound1:AVAudioPlayer?
var Sound2:AVAudioPlayer?
var Sound3:AVAudioPlayer?
var Sound4:AVAudioPlayer?
var Sound5:AVAudioPlayer?
var Sound6:AVAudioPlayer?
var Sound7:AVAudioPlayer?
var Sound8:AVAudioPlayer?
var Sound9:AVAudioPlayer?
var Sound10:AVAudioPlayer?
var Sound11:AVAudioPlayer?
var Sound12:AVAudioPlayer?
var Sound13:AVAudioPlayer?
var Sound14:AVAudioPlayer?
var Sound15:AVAudioPlayer?
var Sound16:AVAudioPlayer?
var Sound17:AVAudioPlayer?
var Sound18:AVAudioPlayer?
var Sound19:AVAudioPlayer?
var Sound20:AVAudioPlayer?
var Sound30:AVAudioPlayer?
var Sound40:AVAudioPlayer?
var Sound50:AVAudioPlayer?
var Sound60:AVAudioPlayer?
var Sound70:AVAudioPlayer?
var Sound80:AVAudioPlayer?
var Sound90:AVAudioPlayer?
var Sound100:AVAudioPlayer?
var Sound200:AVAudioPlayer?
var Sound300:AVAudioPlayer?
var Sound400:AVAudioPlayer?
var Sound500:AVAudioPlayer?
var Sound600:AVAudioPlayer?
var Sound700:AVAudioPlayer?
var Sound800:AVAudioPlayer?
var Sound900:AVAudioPlayer?
var currentValue = 0
func updateCurrentValue() {
let hundreds = max(0, pickerView.selectedRow(inComponent: 0))
let tens = max(0, pickerView.selectedRow(inComponent: 1))
let ones = max(0, pickerView.selectedRow(inComponent: 2))
currentValue = hundreds * 100 + tens * 10 + ones
}
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 3
}
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return String(row)
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return 10 // digits 0 - 9
}
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
updateCurrentValue()
changeLabelText()
}
//Some Functions as example of how it works:
private func accouncingNumbers() {
//for single digit
if currentValue == 1 {
Sound1?.play()
}
//for double digits
if currentValue == 24 {
Sound20?.play()
SoundTimer = Timer.scheduledTimer(withTimeInterval: 1.2, repeats: false) {timer in
self.Sound4?.play()
self.SoundTimer?.invalidate()
self.SoundTimer = nil
}
}
//for 3-digits
if currentValue == 146 {
Sound100?.play()
SoundTimer = Timer.scheduledTimer(withTimeInterval: 1.2, repeats: false) {timer in
self.Sound40?.play()
self.SoundTimer?.invalidate()
self.SoundTimer = nil
self.SoundTimer = Timer.scheduledTimer(withTimeInterval: 1.2, repeats: false) {timer in
self.Sound6?.play()
self.SoundTimer?.invalidate()
self.SoundTimer = nil
}
}
}
//Sounds imported here
do
{
let audioURL1 = Bundle.main.url(forResource: "1", withExtension: "mp3")!
Sound1 = try AVAudioPlayer(contentsOf: audioURL1)
Sound1?.prepareToPlay()
}
catch
{
print(error)
}
}
このプロセスでは、より簡単で短期間の方法を探しています。
なぜあなたは1つ以上のオーディオプレーヤーを持っていますか? – rmaddy
あなたのオーディオプレーヤーの作成方法と設定方法を示すコードを更新して、自分が行っていることを確認できます。 – rmaddy
がコードを更新しました。 @rmaddy – Shahin