2017-02-03 1 views
0

Timer 클래스를 사용하여 매 x 초마다 특정 코드를 실행하고 있습니다. 이 코드에서 어떤 일이 발생하면 타이머를 무효화하여 "루프"를 중지하고 싶습니다.변수를 설정하지 않고 타이머를 무효화하는 방법

: 엑스 코드 나에게 경고를 제공하므로,

let timer = Timer.scheduledTimer(withTimeInterval: 5, repeats: true, block: { timer in 

    //when something happens 
    timer.invalidate() 

}) 

그러나, 나는 내 코드에서 다른 곳이 타이머를 사용하지 마십시오

나는 다음을 수행하여이 작업을 수행하기 위해 관리해야 불변의 값 'timer'의 초기화는 사용되지 않았습니다. '_'에 대한 할당으로 대체하거나 제거하는 것을 고려하십시오.

명백하게 이것으로 내 앱이 실행되는 것을 멈추지는 않지만 경고를 없애고 싶습니다.

Timer.scheduledTimer(withTimeInterval: 5, repeats: true, block: { timer in 
    //do stuff 
}) 

여전히 작동하지만 그때 타이머를 무효화하는 방법을 모른다 :

난 그냥 사용하는 것을 알고있다. 클로저 안의 invalidate()을 호출하면 작동하지 않습니다. (오래 알았지 만 어쨌든 시도해 보았습니다.)

일반적으로 SO에서 Timer 질문을 볼 때 사람들은 전역 타이머 변수를 사용하므로 쉽게 무효화 할 수 있습니다. 그러나 일단 완료되면 타이머 객체를 사용하지 않기 때문에 필요하지 않기 때문에이 작업을 원하지 않습니다.

나는 이것이 매우 일반적인 문제 일 것이라고 생각했지만 도움이되는 것을 찾을 수 없었습니다. 누구든지 효과적으로 변수를 설정하지 않고 타이머를 무효화 할 수있는 방법에 대한 어떤 생각을 밝힐 수 있습니까?

답변

4

timer.invalidate()으로 전화해야하지만 여기서 timerTimer 블록을 나타냅니다.

Timer.scheduledTimer(withTimeInterval: 5, repeats: true, block: 
{ 
    timer in //This is object that you need to use 

    //do stuff 

    //when something happens 
    timer.invalidate() 
}) 
+0

아, 그렇습니다. 블록 var에 대해 잊어 버렸습니다. 이제는 왜 필요한지 이해합니다.) –

+1

10 분 후에이 대답을 받아 들일 수 있습니다. –

+0

@BenjaminLowry Welcome mate :) –

관련 문제