Как синхронизировать различные действия на языке Swift для IOS

#ios #swift

#iOS #swift

Вопрос:

Я создал таймер в одном классе и попытался сделать что-то еще в другом классе, пока таймер работает, и сделать что-то еще, пока таймер останавливается. Например, показывать каждую секунду, когда работает таймер. Я упростил код, как показано ниже. Как это реализовать?

 import Foundation
import UIView

class TimerCount {
var timer: NSTimer!
var time: Int!
init(){
    time = 5
    timer = NSTimer.scheduledTimerWithTimeInterval( 1.0 , target: self, selector: Selector("update"), userInfo: nil, repeats: true)
}
func update(){
    if(time > 0) {
       time = time - 1
        // do something while timer works
    }
    else{
        timer.invalidate()
        timer = nil
        time = 5
    }
}
}


class Main: UIView {
var Clock: TimerCount!
override func viewDidLoad() {
    Clock = TimerCount()
    //? do something else while clock works
    // ? do other things while clock stops
    // FOR EXAMPLE: show every second when timer works
    if(Clock.time > 0){
        println(Clock.time)
    }else{
        println("clocker stops")
    }

}        
}
  

Комментарии:

1. вы спрашиваете, как ссылаться на переменную time в классе TimerCount из класса Main?

2. Я знаю, как это сделать, и добавляю это в приведенный выше пример кода, чтобы прояснить цель. Знаете ли вы, как отображать каждую секунду в основном классе, а не в классе TimerCount?

Ответ №1:

viewDidLoad скорее всего, будет вызван только один раз. Вы могли бы просто создать метод update в вашем Main объекте, а затем передать этот экземпляр main и этот метод update в scheduledTimerWithTimerInterval вызов. В противном случае вам понадобится новый метод в основном классе для вызова из класса timerCount и передачи int для текущего времени.

Это в вашем основном классе:

 func updateMethodInMain(timeAsInt: Int){
//do stuff in Main instance based on timeAsInt
}
  

Это то, что у вас есть в вашем классе timer:

 func update(){
    if(time > 0) {
       time = time - 1
        instanceNameForMain.updateMethodInMain(time)
    }
    else{
        timer.invalidate()
        timer = nil
        time = 5
    }
}
}
  

Комментарии:

1. Я знаю ваш метод, но в моем конкретном состоянии он не разрешен. Как я и просил, я хотел бы решить эту проблему только в основном классе, без изменения класса TimerCount. Другими словами, я хочу знать, есть ли у swift метод для регистрации или мониторинга активности таймера?

2. Я предлагаю первый вариант, который позволил бы вам изменять только main. Хотя второй вариант был бы стандартным.