Проблема, с которой вы сталкиваетесь, заключается в том, что func updateTimer
объявлен под #selector
и, следовательно, еще не «доступен», если говорить проще. Вероятно, вы хотели бы переместить функцию за пределы hardnessSelected
следующим образом:
class ViewController: UIViewController {
@IBOutlet weak var progress: UILabel!
let eggTimes = ["Soft" :3, "Medium":4, "Hard":6]
var secondsRemaining = 60
var timer = Timer()
@IBAction func hardnessSelected(_ sender: UIButton) {
self.timer.invalidate()
let hardness = sender.currentTitle!
self.secondsRemaining = self.eggTimes[hardness]!
self.timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(self.updateTimer), userInfo: nil, repeats: true)
}
@objc func updateTimer() {
if self.secondsRemaining > 0 {
print("\(self.secondsRemaining) seconds left to finish")
self.secondsRemaining -= 1
}
else {
self.timer.invalidate()
self.progress.text = "DONE"
}
}
}
Вам также необходимо добавить @objc
перед именем функции, чтобы открыть ее для Obj C среды выполнения. Вы можете прочитать больше об этом здесь .