2016-08-09 2 views
1

У меня есть пример из практики. В которой у меня есть функция с именемКак определить продолжительность 30 секунд

loadData(action:String) 

на viewDidLoad Я называю эту функцию как LoadData («синхронизация») Теперь я хочу, чтобы вызвать эту функцию как LoadData («нагрузка»), если его вызова интервал между ними 30 секунд , Позволяет сказать, что я хочу называть эту функцию «синхронизацией», если прошло 30 секунд, а если нет, то «нагрузка»

Прошу вас, напр.

+1

Не могли бы вы объяснить подробнее :) –

ответ

4

Существует одно решение использовать NSTimer для подсчета секунд. и когда вы сначала вызываете метод loadData("sync"), запустите таймер. и увеличивать второе. и когда вам нужно вызвать эту функцию, проверьте вычисленные секунды, если она> 30, затем вызовите sync, иначе звоните load. см. ниже код.

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 
} 

теперь, когда вы должны вспомнить метод loadData проверить вторую переменную, если> 30 затем вызвать sync еще load. и invalidate этот таймер, чтобы таймер остановил мониторинг или вычислил второй.

Нравится это.

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

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

Сначала вы вызываете свою функцию с параметром «sync», затем включаете два варианта (в зависимости от вашей версии Swift - вы загрузили бета-версию разработчика, если не используете опцию Swift 2) ниже, чтобы позвонить loadData с параметром «load» через 30 секунд. Если вы используете опцию Swift 3, замените className на любой класс, в котором находится ваша функция, скорее всего это ViewController или имя вашего 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 
} 

Пожалуйста, не стесняйтесь, дайте мне знать, если у вас есть какие-либо дополнительные вопросы или вопросы :)

1

создать переменная экземпляра var lastSync = NSDate()

установить текущую дату lastSync при использовании действия SYNC

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

} 

при вызове вашего loadData: чека на интервал времени

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

затем вызовите ваш метод, передавая reqAction в качестве параметра

loadData(reqAction)