2017-05-08 3 views
1

Ich habe diesen Code in einem anderen Thread (ganz unten) für Swift 3 gefunden und es scheint nicht zu funktionieren in meinem IOS-Projekt.Wie kann ich diesen Swift 3 Singleton als globalen Timer für mein IOS-Projekt verwenden?

Ich weiß, es ist ein Singleton, aber ich muss zugeben, ich bin mir nicht sicher, wie man es in meinem IOS-Projekt verwendet, so dass der Timer über alle ViewController funktioniert.

Kann ich Folgendes tun? Und wenn nicht, wie kann ich das benutzen?

var t = TimeModel.sharedTimer 

t.startTimer(0.25, testing) 

var counter = 0 

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

Was mache ich falsch?

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

Welche Probleme haben Sie? Was geschieht? Was willst du passieren? Erhalten Sie irgendwelche Fehler? – Paulw11

+0

Ja. Ich bekomme Xcode rote Flags und es wird nicht kompilieren. –

+1

Bitte [bearbeiten] (http://stackoverflow.com/posts/43838466/edit) Ihre Frage, um diese Fehler zu zeigen. – Paulw11

Antwort

0

// Rufen Sie die Methode so.

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

Wenn Sie Timers Selektor Methode in einem anderen Viewcontroller

Sie müssen rufen Sie einige Änderungen in Ihrer Methode machen;

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) 
       } 

Anruf in einem anderen Viewcontroller

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