如何从Timer触发的函数中返回值

  • 本文关键字:函数 返回值 Timer swift
  • 更新时间 :
  • 英文 :


我创建了一个计时器来触发函数timerFire,每5秒接受另一个swift文件中的DoublehowHungry

计时器获取howHungry的值,并在每次计时器触发并返回新值时将其减少1。

返回howHungry的新值后,如何将howHungry的新值检索到文件1.swift

由于原始值没有减少,每次都发送相同的值

控制台当前显示:

Hunger value is 14.0
Hunger value is 14.0
Hunger value is 14.0

文件1.swift

let hungerTimer = myTimer()
hungerTimer.startTimer(timerInitialValue: howHungry)

文件2.swift

func startTimer(timerInitialValue:Double){

if timer == nil{ //Create a new timer for hunger if one doesn't exist
timer = Timer.scheduledTimer(timeInterval: 2, target: self, selector: #selector(timerFire(sender:)), userInfo: timerInitialValue/*how hungry*/, repeats: true)
print("New Timer Started")
}else{ //If a timer does exist, end it and start a new one.
timer!.invalidate()
timer = nil
print("Old Timer Stopped")
timer = Timer.scheduledTimer(timeInterval: 2, target: self, selector: #selector(timerFire(sender:)), userInfo: timerInitialValue, repeats: true)
print ("Now New Timer Started")
print(timer)
}
}
@objc func timerFire(sender: Timer) -> Double{
//get hungryDouble value from Timer       
var hungryDouble = sender.userInfo as! Double
//Reduce it by 1
hungryDouble -= 1.0
print("Hunger value is (hungryDouble)")
return(hungryDouble)
}

您可以在file2.swift中添加回调

var callback:((Double)->())?
@objc func timerFire(sender: Timer){
//get hungryDouble value from Timer       
var hungryDouble = sender.userInfo as! Double
//Reduce it by 1
hungryDouble -= 1.0
print("Hunger value is (hungryDouble)")
callback?(hungryDouble)
} 

file1.swift内部

let hungerTimer = myTimer()
hungerTimer.startTimer(timerInitialValue: howHungry)
hungerTimer.callback = { [weak self] res in
print(res)
} 

最新更新