微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么这个 Swift Timer 没有触发?

如何解决为什么这个 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。你有两个选择。

  1. 将您的计时器声明为 lazy var

  2. 将您的计时器声明移至任何视图控制器方法,通常为 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 举报,一经查实,本站将立刻删除。