#swift
#swift
Вопрос:
Я пытаюсь получить доступ к свойству timer в UIViewController
Для самой последней версии swift UIViewController
, похоже, нет элемента «updateTimer»
class InGameViewController: UIViewController {
@IBOutlet weak var countdownTimerLabel: UILabel!
@IBOutlet weak var questionLabel: UILabel!
@IBOutlet weak var pointsLabel: UILabel!
@IBOutlet weak var initialCountdownLabel: UILabel!
var seconds = 5
var timer = Timer()
var isTimerRunning = false
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
let value = UIInterfaceOrientation.landscapeLeft.rawValue
UIDevice.current.setValue(value, forKey: "orientation")
}
func runTimer() {
timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: (#selector(UIViewController.updateTimer)), userInfo: nil, repeats: true)
}
}
Комментарии:
1. попробуйте self.updateTimer не добавляет UIViewController
Ответ №1:
сначала вам необходимо создать функцию updateTimer, которая будет использоваться в вашей функции выбора функции scheduledTimer. убедитесь, что вы оформили его как objc.
Также удалите UIViewController в функции selector, поскольку функция присутствует только в ВАШЕМ текущем классе viewcontroller (InGameViewController), а не в родительском классе UIViewController.
@objc func updateTimer() {
print("timer updated")
}
timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: (#selector(updateTimer)), userInfo: nil, repeats: true)
Ответ №2:
UIViewController не имеет свойства, вызываемого updateTimer
Я не думаю, что вы можете просто вызвать свойство в #selector()
, поскольку оно имеет неправильную подпись и приведет к сбою.
для справки ссылка на API на то, что вы вызываете:https://developer.apple.com/documentation/foundation/timer/1412416-scheduledtimer
Ответ №3:
class InGameViewController: UIViewController {
@IBOutlet weak var countdownTimerLabel: UILabel!
@IBOutlet weak var questionLabel: UILabel!
@IBOutlet weak var pointsLabel: UILabel!
@IBOutlet weak var initialCountdownLabel: UILabel!
var seconds = 5
var timer = Timer()
var isTimerRunning = false
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
let value = UIInterfaceOrientation.landscapeLeft.rawValue
UIDevice.current.setValue(value, forKey: "orientation")
}
func runTimer() {
timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: (#selector(self.updateTimer)), userInfo: nil, repeats: true)
}
}
@objc func updateTimer() {
print("timer updated")
}