iOS 개발자/Xcode 기능 정리

Xcode 기능 - 일정주기로 반복되는 함수 (타이머) 만들기 / repeat function, timer

FDEE 2021. 2. 6. 01:47

이번에는 개인어플 제작에 쓰인 기능 중 하나인 타이머 기능에 대해 알아볼께요

꼭 타이머에만 적용되진 않고 새로고침, 또는 시간확인 등등으로 사용이 가능하답니다

 

 

 

일단 타이머로 쓰인 예제영상부터 보여드릴께요

 

 

이런식으로 일정한 시간 간격으로 수행되는 함수에 대해 알아볼께요!

 

1) ViewController

이번에도 역시 ViewController 에서 작성된답니다

2) 주기함수 실행하기

먼저 함수를 만들기 위해선 두가지 변수가 필요합니다

var timeTrigger = true
var realTime = Timer()

timeTrigger 변수는 변수명 그대로 타이머 함수를 동작시킬수 있는지 여부를 저장합니다

이 변수를 통해 딱 한번만 스타트를 끊어서 주기적으로 동작되는 그런 원리에요

그리고 동작을 위한 realTime 변수명의 Timer() 변수를 선언합니다!

위의 두가지 변수명은 원하는대로 바꾸셔도 상관 없습니다

 

그러면 이제 주기함수를 실행해볼께요!

 

if(timeTrigger) {
    checkTimeTrigger()
}

위에서 말했듯이 시작을 딱 한번만 해야하기 때문에

동작 여부 변수 (timeTrigger) 값에 따라 true인 경우에만

checkTimeTrigger() 함수를 실행 (시작) 하게 됩니다.

이 checkTimeTrigger() 함수는 아래에서 바로 설명됩니다!

 

func checkTimeTrigger() {
    realTime = Timer.scheduledTimer(timeInterval: 1, target: self,
        selector: #selector(updateCounter), userInfo: nil, repeats: true)
    timeTrigger = false
}

위쪽의 코드에서 checkTimeTrigger() 함수를 실행했으니 이 코드가 실행이 됩니다

여기서 realTime은 처음에 만든 Timer() 변수명 입니다! 여기서 중요하게 볼점이 두가지가 있습니다

 

timeInterval은 주기를 의미합니다. 여기서 1은 1초마다 동작한다는 뜻입니다

이를 0.1, 또는 0.01 이런식으로 아주짧은 주기로 동작하겠금도 가능합니다!

#selector 뒤에있는 updateCounter가 바로 주기적으로 실행되는 함수입니다!

물론 updateCounter 이름 또한 원하는대로 수정이 가능합니다

 

또한 함수를 실행시켰으니 동작여부 값인 timeTrigger를 false로 변경해줍니다

 

바로 이 updateCounter가 주기적으로 동작되는 함수입니다

@objc func updateCounter(){
    //주기적으로 동작되는 함수 작성
    print("update!")
}

여기서 @objc를 꼭 명시를 해주셔야 에러가 안납니다 (이유는 저도 몰라요ㅠㅠ)

 

만약에 윗 코드를 그대로 실행하게 된다면 결과가 어떻게 될까요??

1초마다 log 창에 update! 내용이 찍히게 될겁니다! 간단하죠?

이렇게 하면 주기적으로 특정 함수를 실행할 수 있게 된답니다.

 

3) 주기함수 정지하기

그러면 정지는 어떻게 해야할까요?

 

timeTrigger = true
realTime.invalidate()

간단하게 위 두줄의 코드를 통해 정지가 가능합니다

timeTrigger는 함수 동작여부를 저장합니다. 함수를 정지시켰으니 다시 실행하려면 true 값이어야겠죠?

Timer() 변수인 realTime.invalidate() 함수를 통해 동작을 정지시키게 됩니다!

 

 

 

이렇게 간단한 구조로 일정간격을 두고 실행되는 함수를 만들 수 있답니다