2017-05-08 26 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)") 
     } 
相關問題