仅在变量输出

时间:2017-08-04 22:35:16

标签: swift swift3

我创建了以下硬币投掷程序,该程序还触发音频文件,每一枚硬币每秒抛出一次。我想知道如何改变这一点,以便音频仅在结果从头部变为尾部时触发,反之亦然。不是现在的每一秒。非常感谢任何帮助。

import UIKit
import AVFoundation

class ViewController: UIViewController {

var times: Timer!
var timer: Timer!
var coinFlip : Int = 0
var coinResult : String = ""
var audioPlayer : AVAudioPlayer!
let soundArray = ["note1", "note7"]

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    times = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(fiftyFifty), userInfo: nil, repeats: true)
    timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(result), userInfo: nil, repeats: true)
    result()

}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

func fiftyFifty() -> Int {

    coinFlip = Int(arc4random_uniform(2))

    return coinFlip
}
func result() -> String {

    if coinFlip == 1 {
        coinResult = "Heads"
print("Heads")
        playSound(soundFileName: soundArray[0])
    }
    else {
        coinResult = "Tails"
print("Tails")
        playSound(soundFileName: soundArray[1])
    }
}

func playSound(soundFileName : String) {
    let soundURL = Bundle.main.url(forResource: soundFileName, withExtension: "wav")
    do {
        audioPlayer = try AVAudioPlayer(contentsOf: soundURL!)
    }
    catch  {
        print(error)
    }
    audioPlayer.play()
}
}

我现在改变它以从result(),coinResult添加新的变量输出。不确定这是否有帮助,但希望可能。

1 个答案:

答案 0 :(得分:0)

如果我理解得很清楚,当硬币翻转时,你想播放一首歌,在这种情况下你可以简单地将你的coinFlip声明更改为:

var coinFlip : Int = 0 {
    didSet {
        result()
    }
}

didSet是一个属性观察者,它观察并响应属性值的变化。

  

在存储新值后立即调用didSet。

您可以在Apple's documentation中阅读有关财产观察员的更多信息。

编辑:您的代码将是这样的:

import UIKit
import AVFoundation

class ViewController: UIViewController {

var times: Timer!
var timer: Timer!

// Change this
var coinFlip : Int = 0 {
    didSet {
        result()
    }
}

var audioPlayer : AVAudioPlayer!
let soundArray = ["note1", "note7"]

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    times = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(fiftyFifty), userInfo: nil, repeats: true)
    timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(result), userInfo: nil, repeats: true)
    result()

}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

func fiftyFifty() -> Int {

    coinFlip = Int(arc4random_uniform(2))

    return coinFlip
}
func result() {

    if coinFlip == 1 {
print("Heads")
        playSound(soundFileName: soundArray[0])
    }
    else {
print("Tails")
        playSound(soundFileName: soundArray[1])
    }
}

func playSound(soundFileName : String) {
    let soundURL = Bundle.main.url(forResource: soundFileName, withExtension: "wav")
    do {
        audioPlayer = try AVAudioPlayer(contentsOf: soundURL!)
    }
    catch  {
        print(error)
    }
    audioPlayer.play()
}
}