Функция timeR
определена как локальная функция внутри hardnessSelected
, поэтому она видна только внутри своей охватывающей функции hardnessSelected
.
Если вы хотите передать значение hardness
в onTimerFires
, вам нужно сохранить его в свойстве экземпляра ViewController
, к которому у onTimerFires
и hardnessSelected
есть доступ. Затем переместите timeR
в onTimerFires
и передайте значение hardness
.
class ViewController: UIViewController {
private let eggTimes:[String:Int] = [
"Soft":5,
"Medium":7,
"Hard":12,
]
var hardness: String?
var timer:Timer?
@objc func onTimerFires() {
func timeR(hardness: String) -> Int {
if eggTimes[hardness] == 5 {
return 120
} else if eggTimes[hardness] == 7{
return 420
} else {
return 720
}
}
var timeLeft:Int = timeR(hardness: hardness ?? "")
timeLeft -= 1
print("\(timeLeft) seconds left")
if timeLeft <= 0 {
timer!.invalidate()
timer = nil
}
}
@IBAction func hardnessSelected(_ sender: UIButton) {
timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(onTimerFires), userInfo: nil, repeats: true)
hardness = sender.currentTitle
print(time)
}
}