2016-08-09 7 views
1

Ich habe eine Fallstudie hier. In dem habe ich eine FunktionWie erkennen 30 Sekunden Dauer

namens
loadData(action:String) 

auf viewDidLoad ich diese Funktion als loaddata nenne („sync“) Nun möchte ich diese Funktion als loaddata erinnern („load“), wenn sein Aufruf Intervall dazwischen 30 Sekunden . Sagen wir, ich möchte diese Funktion mit "Sync" aufrufen, wenn 30 Sekunden vergangen sind und wenn nicht, dann "Laden"

Bitte führen Sie mich.

+1

Könnten Sie bitte mehr erklären :) –

Antwort

4

Es gibt eine Lösung Verwenden Sie NSTimer, um die Sekunden zu zählen. und wenn Sie zuerst die loadData("sync") Methode aufrufen, starten Sie den Timer. und inkrementiere die Sekunde. und wenn Sie diese Funktion aufrufen müssen, überprüfen Sie die berechneten Sekunden, wenn sie> 30 sind, und rufen Sie dann sync an, andernfalls rufen Sie load an. Siehe den folgenden Code.

var timer : NSTimer! 
var second = 0 

override func viewDidLoad() { 
    super.viewDidLoad() 

    // here you start your first sync method. 

    loadData("sync") 

    // start the timer here so you can get how many seconds before you started or called your method. 
    timer = NSTimer() 
    timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: #selector(ViewController.calculateSeconds), userInfo: nil, repeats: true) 
} 

func calculateSeconds() { 
    second += 1 
} 

jetzt, wenn Sie die loadData Methode erinnern an die zweite Variable überprüfen, wenn es> 30 rufen dann sync sonst load. und invalidate, dass der Timer damit aufhört zu überwachen oder die zweite zu berechnen.

So.

func whatever() { 
    if second > 30 { 
     loadData("sync") 
    } else { 
     loadData("load") 
    } 

    second = 0 
    timer.invalidate() 
    timer = nil 
} 
1

Zuerst rufen Sie Ihre Funktion mit dem Parameter "sync" auf, dann setzen Sie eine der beiden Optionen (abhängig von Ihrer Version von Swift - haben Sie die Entwickler Beta heruntergeladen - wenn nicht dann Swift 2 Option verwenden) unten in anrufen loadData mit dem Parameter "load" nach 30 Sekunden. Wenn Sie die Swift 3-Option verwenden, ersetzen Sie Klassenname durch die Klasse, in der sich Ihre Funktion befindet - höchstwahrscheinlich ist es ViewController oder der Name Ihres UIViewController.

Swift 3

Swift 2

var timer = NSTimer.scheduledTimerWithTimeInterval(30.0, target: self, selector: "loadDataLater:", userInfo: "load", repeats: false) 
//Then you have to define a new function as below 
func loadDataLater(inputTimer: NSTimer) { 
    var action = inputTimer.userInfo as String 
    //The body of the loadData function goes here 
} 

Bitte fühlen Sie sich frei, mich zu informieren, wenn Sie weitere Fragen oder Probleme haben :)

1

erstellen eine Instanzvariable var lastSync = NSDate()

setzen das aktuelle Datum lastSync Wenn Sie die Aktion Synchronisierung verwenden

func loadData(action:String) 
{ 
    if action == "sync" 
    { 
     lastSync = NSDate() 
    } 

} 

während loadData: Prüfung für das Zeitintervall, indem reqAction als Parameter

let timeInsterval = NSDate().timeIntervalSinceDate(lastSync) 
let reqAction = timeInsterval > 30 ? "sync" : "load" 

rufen Sie dann Ihre Methode aufrufen

loadData(reqAction) 
Verwandte Themen