如何解决为什么这个 Swift Timer 没有触发?
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
@IBOutlet weak var Time: UILabel!
let everyMinuteTimer = Timer.scheduledTimer(timeInterval: 0.01,target: self,selector: #selector(ViewController.updateTime),userInfo: nil,repeats: true)
@objc func updateTime() {
let currentDateTime = Date()
let formatter = DateFormatter()
formatter.timeStyle = .medium
formatter.dateStyle = .long
let dateTimeString = formatter.string(from: currentDateTime)
Time.text = dateTimeString
}
我试图让这个计时器触发来更新时间标签,但它似乎没有触发并且保持文本静态。
这是我不断收到的错误:
'无法识别的选择器发送到实例 0x600000faed90'
解决方法
问题在于您的代码应该在方法内部。初始化计时器属性时没有 self
。你有两个选择。
-
将您的计时器声明为
lazy var
-
将您的计时器声明移至任何视图控制器方法,通常为
viewDidLoad
。
请注意,我还会更改您的计时器间隔频率。每秒 100 次太多了。如果您只需要在分钟更改时触发您的方法,您可以安排您的计时器在下一个偶数分钟开始并每分钟重复一次。
,这个问题是一个棘手的问题,涉及 self
的含义。改变
override func viewDidLoad() {
super.viewDidLoad()
}
let everyMinuteTimer = Timer.scheduledTimer(timeInterval: 0.01,target: self,selector: #selector(ViewController.updateTime),userInfo: nil,repeats: true)
到
override func viewDidLoad() {
super.viewDidLoad()
self.everyMinuteTimer = Timer.scheduledTimer(timeInterval: 0.01,repeats: true)
}
var everyMinuteTimer : Timer!
我知道这看起来不可思议,但这会解决问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。