Ios swift 3检查计时器是否运行

Ios swift 3检查计时器是否运行,ios,swift3,timer,Ios,Swift3,Timer,我正在编写计时器函数来检查它当前是否正在运行,但似乎我总是发现计时器变量为nil。这样它就可以继续创建一个新的计时器实例 weak var myTimer: Timer? // starting a timer func startTimer(timer: Timer?, interval: Double, _selector: Selector, _repeats: Bool){ weak var _timer = timer if (_timer == nil){

我正在编写计时器函数来检查它当前是否正在运行,但似乎我总是发现计时器变量为nil。这样它就可以继续创建一个新的计时器实例

weak var myTimer: Timer?

// starting a timer
func startTimer(timer: Timer?, interval: Double, _selector: Selector, _repeats: Bool){
    weak var _timer = timer

    if (_timer == nil){
        _timer = Timer.scheduledTimer(timeInterval: interval, target: self, selector: _selector, userInfo: nil, repeats: _repeats)
    }
}

// stopping a timer
func stopTimer(timer: Timer?){
    var _timer = timer

    if (_timer != nil){
        _timer!.invalidate()
        _timer = nil
    }
}
通过调用启动计时器

self.startTimer(timer: self.myTimer, interval: 0.1, _selector: #selector(self.updateTimer), _repeats: true)
不知何故,即使计时器启动后,它仍然为零。因此,第二次调用该函数时,它将调度另一个计时器实例。当我试图阻止它时,它不会成功,因为它总是零。我怎样才能解决这个问题


谢谢

这是意料之中的事。您正在将新的计时器实例分配给函数内部的
弱var
,这将导致在退出函数作用域时释放它。函数的
timer
变量必须声明为
inout

func startTimer(timer: inout Timer?, interval: Double, _selector: Selector, _repeats: Bool) {
if (timer == nil){
        timer = Timer.scheduledTimer(timeInterval: interval, target: self, selector: _selector, userInfo: nil, repeats: _repeats)
    }

第二个函数也是如此-您只将
nil
赋值给函数范围内的局部变量,而不赋值给函数范围外的变量。

这两个
\u timer
变量都在局部范围内,彼此不相关。你期望什么?检查作用域以及为什么要使用weakI。我尝试使用非弱变量。我尝试使用.isValid方法,但是,由于它是nil,这将不起作用。嗨,瓦迪安,Timer.ScheduleTimer(…不允许我使用timer,因为它是一个'let'常量,这就是为什么我要分配一个变量。我应该在这个函数中返回一个timer对象吗?谢谢,这里的关键字是'inout'。谢谢。