iOS/Swift

[swift] Timer๋ฅผ ํ™œ์šฉํ•œ API ๋ฐ˜๋ณตํ˜ธ์ถœ ๋ฐฉ๋ฒ•

๊ฒฝํ‘ธ 2022. 2. 16. 18:03
๋ฐ˜์‘ํ˜•

์•ˆ๋…•ํ•˜์„ธ์š”~

 

์˜ค๋Š˜์€ Timer๋ฅผ ์ด์šฉํ•ด์„œ API๋ฅผ ๋ฐ˜๋ณต ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ์ •๋ฆฌํ•ด๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค : )

 

์ง„ํ–‰ํ•˜๊ณ  ์žˆ๋Š” ํ”„๋กœ์ ํŠธ์—์„œ ๋ฐ˜๋ณต์ ์œผ๋กœ ์œ ์ €์˜ ์ƒํƒœ๋ฅผ ํ™•์ธํ•ด์•ผ ํ•˜๋Š” ๋กœ์ง์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๋– ์˜ค๋ฅด๋Š” ๋ฐฉ๋ฒ•์ด Timer ๋ฐ–์— ์—†์—ˆ๊ณ 

์—ด์‹ฌํžˆ ์ฐพ์•„๊ฐ€๋ฉฐ ์ ์šฉํ•œ ๋‚ด์šฉ์„ ๊ธฐ๋กํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

 

๋จผ์ € Timer์— ๋Œ€ํ•ด์„œ ๊ฐ„๋žตํžˆ ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์•„๋ž˜์˜ ์• ํ”Œ ๊ฐœ๋ฐœ์ž ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•ด์ฃผ์‹œ๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

 

Apple Developer Documentation

 

developer.apple.com

 

Timer๋Š” 

ํŠน์ • ์‹œ๊ฐ„ ๊ฐ„๊ฒฉ์ด ๊ฒฝ๊ณผํ•œ ํ›„ ์‹คํ–‰๋˜๊ฒŒ ํ•˜๊ณ  ์ง€์ •๋œ ๋ฉ”์‹œ์ง€๋ฅผ ๋Œ€์ƒ ๊ฐ์ฒด์—๊ฒŒ ๋ณด๋‚ด๋Š” ๊ฒƒ์ด๋ผ๊ณ  ๋˜์–ด์žˆ์Šต๋‹ˆ๋‹ค.

 

์กฐ๊ธˆ ๋” ์Šคํฌ๋กค์„ ๋‚ด๋ฆฌ๋‹ค ๋ณด๋ฉด ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋Š”์ง€์—๋Œ€ํ•œ ๋‚ด์šฉ์ด ๋‚˜์˜ต๋‹ˆ๋‹ค.

์ €๋Š” ์†Œ๊ฐœํ•ด์ค€ ๋ฉ”์„œ๋“œ ์ค‘์—์„œ

scheduledTimer(timeInterval:target:selector:userInfo:repeats:)๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

 

ํŠน์ •ํ•œ ๋ทฐ์ปจํŠธ๋กค๋Ÿฌ์— ์ง„์ž… ์‹œ

๋ฐ”๋กœ ๋™์ž‘์„ ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํŠน์ •ํ•œ ํŠธ๋ฆฌ๊ฑฐ๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์•„ ์ˆ˜๋™์œผ๋กœ ์‹œ์ž‘ ์‹œ์ ์„ ์ •ํ•  ํ•„์š”๊ฐ€ ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

 

 

 

์‚ฌ์šฉํ–ˆ๋˜ ๋ฉ”์„œ๋“œ์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

Timer.scheduledTimer

Timer.scheduledTimer(timeInterval: <TimeInterval>,
		    target: <Any>, 
                    selector: <Selector>, 
                    userInfo: <Any?>, 
                    repeats: <Bool>)
  • timeInterval: ํƒ€์ด๋จธ ์‹คํ–‰ ๊ฐ„๊ฒฉ์œผ๋กœ ์ดˆ๋ฅผ ์ž…๋ ฅํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ( Double )
  • target: ํ•จ์ˆ˜ selector๊ฐ€ ํ˜ธ์ถœ๋˜์–ด์•ผ ํ•˜๋Š” ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค์ž…๋‹ˆ๋‹ค.
  • selector: ํƒ€์ด๋จธ๊ฐ€ ์‹คํ–‰๋  ๋•Œ ํ˜ธ์ถœํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค.
  • userInfo: selector ์—๊ฒŒ ์ „๋‹ฌํ•  ๋ฐ์ดํ„ฐ, ์—†์œผ๋ฉด nil
  • repeats: ํƒ€์ด๋จธ์˜ ๋ฐ˜๋ณต ์—ฌ๋ถ€๋กœ Bool ํƒ€์ž…์œผ๋กœ ๋˜์–ด์žˆ์Šต๋‹ˆ๋‹ค.

 

์‚ฌ์šฉ๋ฐฉ๋ฒ• 

 

1. Timer ๊ฐ์ฒด ์ƒ์„ฑํ•˜๊ธฐ

- ๊ฐ€์žฅ ๋จผ์ € ์‚ฌ์šฉํ•  ๊ฐ์ฒด๋ฅผ ์„ ์–ธํ•ฉ๋‹ˆ๋‹ค.

var apiTimer = Timer()

 

2.  Selector ๋ฉ”์„œ๋“œ ๋งŒ๋“ค๊ธฐ 

- ํŠน์ •ํ•œ ๊ฐ„๊ฒฉ๋งˆ๋‹ค ํ˜ธ์ถœํ•˜๊ณ  ์‹ถ์€ API๋ฅผ ์ด๊ณณ์— ์ž‘์„ฑํ•ด์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

- ๊ฒช์—ˆ๋˜ ์ด์Šˆ : sender๋ฅผ Timer๋กœ ์„ค์ •ํ•˜์‹œ๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ €์˜ ๊ฒฝ์šฐ, ํƒ€์ด๋จธ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†๋‹ค๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์—ˆ์Šต๋‹ˆ๋‹ค.

 

 @objc func updateUserMatchStatus(sender: Timer) {
    //API๋ฅผ ํ˜ธ์ถœ
 }

 

3. ํŠธ๋ฆฌ๊ฑฐ ํ˜น์€ ๋ทฐ์ปจํŠธ๋กค๋Ÿฌ์˜ ๋ผ์ดํ”„ ์‚ฌ์ดํด์— ๋งž๊ฒŒ ์ดˆ๊ธฐํ™”

- ์„ค๋ช…ํ–ˆ๋˜ ๊ฒƒ์ฒ˜๋Ÿผ ํ•ด๋‹น ๋ทฐ์ปจํŠธ๋กค๋Ÿฌ์˜ ์ง„์ž… ์‹œ ์‹คํ–‰ํ•ด์•ผ ํ•˜๋Š” Timer์˜€๊ธฐ ๋•Œ๋ฌธ์— viewDidLoad์—์„œ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

- ํŠน์ •ํ•œ ํŠธ๋ฆฌ๊ฑฐ(๋ฒ„ํŠผ ํด๋ฆญ, ์ œ์Šค์ฒ˜ ๋“ฑ๋“ฑ)๊ฐ€ ์žˆ๋‹ค๋ฉด ํ•ด๋‹น ๋ฉ”์„œ๋“œ์— ํ•จ๊ป˜ ์ ์–ด์ฃผ๋ฉด ๋  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

 override func viewDidLoad() {
        super.viewDidLoad()
        
        apiTimer = Timer.scheduledTimer(timeInterval: 5,
                                                target: self,
                                                selector: #selector(updateUserMatchStatus(sender:)),
                                                userInfo: nil,
                                                repeats: true)
}

 

์œ„์˜ ์ฝ”๋“œ๋Š”

ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋ฅผ 5์ดˆ ๊ฐ„๊ฒฉ์œผ๋กœ ๋ฐ˜๋ณตํ•ด์„œ ํ˜ธ์ถœํ•ด์ค๋‹ˆ๋‹ค.

 

์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ๊ฒƒ์€ ํƒ€์ด๋จธ๋ฅผ ์ข…๋ฃŒํ•ด์ฃผ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.๋ฌผ๋ก , API๊ฐ€ ํ•œ ๋ฒˆ ์‹œ์ž‘๋˜๊ณ  ๋‚˜์„œ ์ข…๋ฃŒ๋  ํ•„์š”๊ฐ€ ์—†๋‹ค๋ฉด ์ž‘์„ฑํ•˜์ง€ ์•Š์•„๋„ ์ข‹์Šต๋‹ˆ๋‹ค.

 

apiTimer.invalidate()

 

์˜ค๋Š˜์€ Timer๋ฅผ ํ™œ์šฉํ•ด API๋ฅผ ๋ฐ˜๋ณต์ ์œผ๋กœ ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ž‘์„ฑํ•ด๋ดค์Šต๋‹ˆ๋‹ค.

๋” ์ข‹์€ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค๋ฉด ๋Œ“๊ธ€๋กœ ์•Œ๋ ค์ฃผ์„ธ์š”. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿผ ์ด๋งŒ ๐Ÿ‘‹๐Ÿป ๐Ÿ‘‹๐Ÿป ๐Ÿ‘‹๐Ÿป

๋ฐ˜์‘ํ˜•