2017-05-08 25 views
1

我发现这个代码在Swift 3的另一个线程(显示在最下面),似乎无法让它在我的IOS项目中工作。我知道这是一个Singleton,但我不得不承认,我不知道如何在我的iOS项目中使用它,以便计时器可以在所有ViewController中工作。如何将这个Swift 3 Singleton作为IOS项目的全局定时器?

我可以做以下吗?如果不是,我该如何使用它?

var t = TimeModel.sharedTimer 

t.startTimer(0.25, testing) 

var counter = 0 

func testing() 
{ 
    counter += 1 
    print("this is a test \(counter)") 
} 

我在做什么错了?

class TimerModel: NSObject { 
    static let sharedTimer: TimerModel = { 
     let timer = TimerModel() 
     return timer 
    }() 

    var internalTimer: Timer? 
    var jobs = [() -> Void]() 

    func startTimer(withInterval interval: Double, andJob job: @escaping() -> Void) { 
     if internalTimer == nil { 
      internalTimer?.invalidate() 
     } 
     jobs.append(job) 
     internalTimer = Timer.scheduledTimer(timeInterval: interval, target: self, selector: #selector(doJob), userInfo: nil, repeats: true) 
    } 

    func pauseTimer() { 
     guard internalTimer != nil else { 
      print("No timer active, start the timer before you stop it.") 
      return 
     } 
     internalTimer?.invalidate() 
    } 

    func stopTimer() { 
     guard internalTimer != nil else { 
      print("No timer active, start the timer before you stop it.") 
      return 
     } 
     jobs = [()->()]() 
     internalTimer?.invalidate() 
    } 

    func doJob() { 
     for job in jobs { 
      job() 
     } 
    } 

} 
+1

您遇到了什么问题?怎么了?你想要发生什么?你有什么错误吗? – Paulw11

+0

是的。我得到Xcode红旗,它不会编译。 –

+1

请[edit](http://stackoverflow.com/posts/43838466/edit)您的问题,以显示这些错误。 – Paulw11

回答

0

//调用像这样的方法。

let timer = TimerModel.sharedTimer 

timer.startTimer(withInterval: 0.25) { 
    self.testing() 
} 

var counter = 0 
func testing() { 
    counter += 1 
    print("this is a test \(counter)") 
} 

enter image description here

0

如果你想调用计时器的选择方法在其他的ViewController

你需要让你的方法的一些变化;

func startTimer(withInterval interval: Double, controller: UIViewController, andJob job: @escaping() -> Void) { 
        if timerTest != nil { 
        internalTimer.invalidate() 
        internalTimer = nil 
       } 
        jobs.append(job) 
        internalTimer = Timer.scheduledTimer(timeInterval: interval, target: controller, selector: #selector(doJob), userInfo: nil, repeats: true) 
       } 

呼叫另一个视图控制器

var t = TimeModel.sharedTimer.startTimer(0.25, self , testing) 
    var counter = 0 
    func doJob() { 
     counter += 1 
     print("this is a test \(counter)") 
     } 
相关问题