์์ฃผ ๋ฐ๋ณต๋๋ Alamofire๋ฅผ ํจ์๋ก ๋ง๋ค์. feat.Escaping
Alamofire๋ผ๋ ์ข์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฐ๋ค๊ฐ ๋ณด๋ฉด ์๋ก์ด swiftํ์ผ์ ๋ง๋ค๋๋ง๋ค ๋ฐ๋ณต์ ์ผ๋ก ์ด๋ค๋ ์๊ฐ์ด ๋ ๋ค.
๊ทธ๋์ ํจ์๋ก ๋ง๋ค๋ฉด ์ข๊ฒ ๋ค! ๋ผ๊ณ ์๊ฐํ๋ค๊ฐ, ์กธ์ ์ํ ๋น์ ํฌ๊ธฐํ๋ค.
ํฌ๊ธฐํ ๊ณผ์ ์ ๋ณด๊ธฐ์ ์ ์ค๋์ ๊ตฌ์กฐ ๋จผ์ , ์ฒจ๋ถ
์คํ ๋ฆฌ๋ณด๋๋ ์ฌํ, ์ฝ๋๋ ์ฌํ, ํ๋ฉด๋ ์ฌํํ ์ํ์ด๋ค
์ฝ๋ ๊ตฌ์ฑ
- Alamofire๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด import
- ์ฌ์ฉ๋ ํจ์
- url์ ์ ์ธ๊ณผ ์ด๊ธฐํ
- ํต์ ์ฑ๊ณต์ obj ๋ผ๋ ์ด๋ฆ์ Anyํ์
์ ๊ฐ์ง ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ณ ์ถ๋ ฅ
- ์ถ๋ ฅ ๊ฐ: ์ค๋ฅธ์ชฝ ํ๋จ
- Any ํ์ ๋ฐ์ดํฐ๋ฅผ ๋์ ๋๋ฆฌ๋ก ์บ์คํ
- ํด๋น ๋์
๋๋ฆฌ์ค โtextโ๋ผ๋ ํค์ ๋ฐ์ดํฐ๋ฅผ Stringํ์ผ๋ก ์บ์คํ
- ๊ฐ: โServer Textโ๋ผ๋ ๋ฌธ์์ด
- Label์ ์ ์ฉ
์ ๋ฒํธ์ ๊ฐ๋จํ๊ฒ ์ค๋ช ์ ์ฐธ๊ณ ํ๋ฉด ์์ฃผ ๊ฐ๋จํ ์ฝ๋.
๊ทธ๋ฐ๋ฐ, ๋ง์ฝ ๋ค๋ฅธ ํต์ ์ ํ๋ค๊ณ ํ๋ฉด 2๋ฒ ๋ถ๋ถ์์ ๊ต์ฅํ ์ค๋ณต์ด ๋ง์ด ์ผ์ด๋๋ค.
// ์์ฒญ
let request = Alamofire.request(url)
// ์๋ต
request.responseJSON { (response) in
// Switch๋ฌธ ์ฌ์ฉ
switch response.result {
case .success(let obj):
print(obj)
case .failure(let e):
print(e.localizedDescription)
}
}
์์ ์ฝ๋๋ฅผ ๋ณด์,
- ์์ฒญ
- ์๋ต
- ๋ถ๊ธฐ๋ฌธ
์ด๊ฒ๋ค์ ๋ถ๋ช ๋ฐ๋ณต์ด ๋๋ค.
์ฑ์ ๋ณด, ์ฌ์ฉ์ ์ ๋ณด, ๊ธฐํ๋ฑ๋ฑ ํต์ ํ ๋๋ง๋ค ๋๊ฐ์ ์ฝ๋๋ฅผ ์ณ์ผํ๋ค. ๊ทธ๋์ ๋๋ ์กธ์ ์ํ ๋น์ ๊ฐ์ํ ์ํค๊ณ ์ถ์๋ค.
๋ด๊ฐ ํ์ํ๊ฑด nsDic ์์๋ค. ๊ทธ๋์ ์๋์ ๊ฐ์ ์ฝ๋๋ฅผ ์ฌ์ฉํ์๋ค.
(์ฃผ์: ์๋๋ ์ฝ๋์)
1๋ฒ์ ๋ณด๋ฉด ์ด๋ค ํด๋์ค๋ผ๋ ์ ๊ทผํ ์ ์๋ ์ ์ญํจ์๊ฐ ์๋ค.
์ฌ๊ธฐ์ ์ค์ํ๊ฑด return ๊ฐ์ด ์กด์ฌํ๋ฉฐ ํ์ ์ NSDictionary? ์ด๋ค. ์์ ์ด๋ฐ์ ๊ฐ์ด ์ํ๋ nsDic์ ํ์ ์ด๋ค.
// 1-1. ํ์ํ nsDic์ด ๋ ๊ฐ
var returnValue: NSDictionary?
๋๋ ค์ค ๊ฐ์ ํ์ ์ ์ต์ ๋๋ก ์ง์ ํด์ฃผ๊ณ
// 5. returnValue์ ์ง์
returnValue = nsDic
ํต์ ์ ํตํด ๋ฐ์์ ์บ์คํ ํ nsDic ๊ฐ์ returnValue์ ๊ฐ์ผ๋ก ๋ฃ์ด์ฃผ๊ณ
// 6. ๋๋ ค์ฃผ๊ธฐ
return returnValue
6๋ฒ์์ return ํด์ค๋ค!
์ด๊ฒ ๊ณผ์ฐ ๋ ๊น? ๊ฒฐ๋ก ์ ์๋๋ค
์ ์ด๋ฏธ์ง ํ๋จ์ ์ฝ์์ฐฝ์ ๋ณด๋ฉด nil ์์ ์ ์ ์๋ค.
์ nil์ผ๊น?
๊ทธ ๋น์ ์ฐธ ๋ฉ๋ถ์ด์๋๋ฐ, ์ ๋ต์ ๊ฐ๋จํ๋ค. ํต์ ์ ์ผ๋ง๋ ๊ฑธ๋ฆด์ง ๋ชจ๋ฅธ๋ค. ๋ฐ๋ผ์,๋น๋๊ธฐ๋ก ์งํ๋์ผํ๋ค.
๋ง์ฝ ๋น๋๊ธฐ๊ฐ ์๋๋ผ๋ฉด??
์ฑ์์ฒด๊ฐ ๋ฉ์ถฐ ๋ฒ๋ฆด๊ฒ์ด๋ค. ์๋๋ฉด ํต์ ์ด ๋ ๋๊น์ง ๊ธฐ๋ค๋ ธ๋ค๊ฐ ์์ฐจ์ ์ผ๋ก ์งํ๋์ด์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
์๊ฐ์ด ์ข ์ง์ฐ๋๋ค๋ฉด ์ฌ์ฉ์๋ ์ฑ์ด ์ฃฝ์๋? ๋ผ๊ณ ์๊ฐ ํ ๊ฒ์ด๋ค.
๋๋ ํต์ ํ๊ณ ๋๋๋ฉด ํ ๊ฑฐ ํ๊ณ ์ ๋๋ ํ๋์ผ ๊ณ์ํ ๊ฒ ์ด๋ฐ ๋๋์ด๋๊น?
๊ทธ๋์ nil์ด ๋ฐ์ํ๊ฒ์ด๋ค.
์ฌ์ฉ์๊ฐ ๋๋ผ๊ธฐ์ ์ถฉ๋ถํ ๋น ๋ฅธ์๊ฐ์์ ํํ๋์์ง๋ง ์๋์ฝ๋๊ฐ ์งํ๋ ๋์ฏค์ด๋ฉด
return์ ์ด๋ฏธ ๋๋ ํ์ด๋ค.
// 5. returnValue์ ์ง์
returnValue = nsDic // ์ด๋, ์ด๋ฏธ return์ ์งํ๋ ์ํ. ์ฆ, ๋ฃ์ด๋ดค์ ์์ฉ์ด ์๋ค.
๊ทธ๋ ๋ค๋ฉด nsDic์ return ๊ฐ์ผ๋ก ์ ํด์ฃผ๋๊ฒ ์๋๋ผ nsDic์ return ํด์ค๋ค๋ฉด?
์๋๋ค. ๋ค๋ฅธ ๋ฐฉ์์ด ํ์ํ๋ค.
Escaping
์ฒ์์ ์ด ๋ฌธ๋ฒ์ ๋ํด ๋๋ฌด์ง ์ดํด๊ฐ ์๊ฐ๋ค. ์กธ์ ์ํํ ๋น์์๋ ์ฐพ์์์ง๋ง, ์๊ฐ์ด ๊ธํด์ ์กฐ๊ธ ์๋ํด๋ณด๋ค ํฌ๊ธฐํ๋ค.
ํ์ง๋ง, ์๋ฉด ์ ๋ง ๋์์ด ๋ง์ด ๋๋ค. ํน์ฌ๋ ์ฝ๋ ๋ถ์ด ๊ณ์๋ค๋ฉด ์ด๋ฆฌ ์ ๋ฆฌ ์๋ํด์ ๊ผญ ์ฑ๊ณตํ์๊ธธ.
์ผ๋จ ์ฝ๋๋ฅผ ๋ณด์.
ํน๋ณํ 0๋ฒ์ด๋ผ ์ผ๋ค. ์ฑ ์ผ๋ก๋ง ๊ณต๋ถํ๋ค๋ฉด, ์ ๋ง ์ ๋ง ์์ํ ๋ชจ์ต์ผ๊ฒ์ด๋ค.
func useEscaping(url: String, handler: (NSDictionary) -> Void) {}
ํน์, ์ด๋ฐ ๋ชจ์ต์ด๋ฉด ์กฐ๊ธ์ด๋๋ง ์ต์ํ๋ค. ์ค์ํํธ๋ ํจ์ํ ์ธ์ด๋ผ๊ณ ๋ ๊ฐ๋ฅํ๋ฐ, ๊ทธ ์ด์ ๋ ์ค์ํํธ์์ ํจ์๋ ์ผ๊ธํจ์์ ์ํ๊ธฐ ๋๋ฌธ์ด๋ค. ์ฌ๋ฌ๊ฐ์ง ์กฐ๊ฑด์ด ์์ง๋ง ๋ณต์กํ๋, ๋์ค์ ๋ ์์๋ณด๋๊ฑธ๋ก ํ๊ณ . ์ฌ๊ธฐ์ ๊ด๋ จ๋ ์ผ๊ธ ํจ์ ์กฐ๊ฑด๋ค๋ง ๋งํด๋ณด๋ฉด
- ์ธ์ ๊ฐ์ผ๋ก ํจ์๋ฅผ ์ ๋ฌํ ์ ์๋ค.
- ๋ฐํ ๊ฐ์ผ๋ก ํจ์๋ฅผ ์ ๋ฌํ ์ ์๋ค.
๋๊ฐ์ง ์ ๋? ์ ๊ธฐ์ handler ๋ผ๋ ์ธ์๋ ํ์
์ด NSDictionary๋ง ๋ฐ๋๊ฒ ์๋๋ผ return์ด ์๋ค. ์ด๊ฑด ๋๊ฐ๋ด๋ ํจ์๋ค. ์ด๋ฐ์์ผ๋ก ์ธ์๊ฐ์ผ๋ก ํจ์๋ฅผ ๋ฐ์๋ค. ๋ฐํ๊ฐ์ผ๋ก๋ ๊ฐ๋ฅํ๊ณ ! ์ผ๊ธํจ์๋ ํํ๋ ์ค์ํ์ง๋ง ๊ทธ ๋ด์ฉ์ธ ํจ์๋ฅผ ๋ฐ์๋ค๋๊ฒ ์ค์ํ๋ค. ๊ทธ๋ ๋ค๋ฉด @escaping
์ด ์๋ฏธํ๋๊ฒ์ ๋ฌด์์ผ๊น
handler ๋ผ๋ ํํ์ ๋ณดํต โ๋ค๋ฃจ๋คโ๋ก ์ฌ์ฉ๋๊ณ stackOverFlow ๊ฐ์ ๊ณณ์์ ๋ณด๋ฉด
๊ด๋ จ ์๋ฃ์์ ์ข ์ข ์ธ์๊ฐ์
completionHandler
,completion
๋ผ๋ ๋จ์ด๋ฅผ ๋ง์ด ์ฐ๋๋ฐ,์ด๋ ์๋ฃํ ์ฒ๋ฆฌํ ์์ , ์๋ฃํ ๋ค๋ฃฐ๊ฒ ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ์ข๋ ํธํ๋๊ฒ ๊ฐ๋ค.
@escaping
์ด๋ฆ๋ถํฐ๊ฐ ํ์ถ์ด๋ค. ๋๋ ์ด๋ ๊ฒ ์ดํดํ๊ณ ์๋ค. ํ์ฌ ํจ์๋ก๋ถํฐ ๋๋ง์ณ ๋์จ๋ค. ํ์ง๋ง, ๊ทธ๋ NSDictionary๋ฅผ ๊ฐ์ง๊ณ ๋๋ง์น๋ค. ์ด๊ฒ ํฌ์ธํธ๋ค, ๋ค๋ฅด์ง๋ง ๋น์ทํ๊ฒ ์๊ฐํ ์ ์๋๊ฑด, NSDictionary ๊ฐ์ ๋ฆฌํดํด์ค๋ค๊ณ ๋ ๋ณผ ์ ์๋ค.
์ฐ๋ ๋ฐฉ์์ ์ด๋ฏธ ๋ง์ด๋ค ์ ํ์ ๊ฒ์ด๋ค. ๋น์ทํ ๋ฌธ๋ฒ์ ๋ณด์
1๋ฒ์ ๊ฒฝ์ฐ๋ ์ ๋๋ฉ์ด์ ํจ๊ณผ๋ฅผ ์ฌ์ฉํ ๋ ์์ฃผ ์ฌ์ฉํ๋ ๋ฌธ๋ฒ์ด๋ค.
2๋ฒ์ ๊ฒฝ์ฐ ํฌ์คํ ์ ์์ฃผ ๋์จ Alamofire์์ ์๋ต ๊ฐ์ ๋ฐ์์๋ ์ฒ๋ฆฌํ๋ ๋ถ๋ถ์์ ๋์จ๊ฒ์ด๋ค.
์ ๋ฐ ๋ฌธ๋ฒ์ ๋ง๋ค๋ ค๋ฉด ํ์ํ๊ฒ์ @escaping์ ์ฐ๋ ๊ฒ์ด๋ผ๋ ๊ฒฐ๋ก ์ด ๋์๋ค!
๊ฐ๊ฐ์ ์ฐจ์ด์ ์ ๋ณด์
// 1. Animation ( ์ธ์: o , ๋ฐํ: x)
((Bool)-> Void)?
// 2. Alamofire Response ( ์ธ์: o , ๋ฐํ: x)
(DataResponse<Any>) -> Void)
// 3. Use Escaping ( ์ธ์: o , ๋ฐํ: x)
(NSDictionary -> Void)
์ฌ์ด ์์๋๋ก ์ ๋ฆฌํ๋ค. ๊ณตํต์ ์ ๋ฐํ ๊ฐ์ด ์ ๋ถ ์๋ค๋๊ฒ.
UIView Animation
1๋ฒ์ ๊ฒฝ์ฐ ์ ๋๋ฉ์ด์ ์ฌ์ฉํ ๋ ์๊ฐ์ ํด๋ณด์,
UIView.animate(withDuration: 2, animations: {
self.view.alpha = 0
}) { (value) in
if value == true {
print("success")
}
}
์์ ์ด ์ ํ ์๊ฐ(์ฌ๊ธฐ์ 2์ด)๋์ animations ์ ๋ด์ฉ์ ์ํํ๊ฒ ๋๋ค, ๊ทธ๋ฆฌ๊ณ ๊ทธ ์์ ์ด ๋๋๋ค์ ํ ์ผ์ completion๋ด์ฉ์ด ๋๋ค. ์ ๊ธฐ์ ๋ค์ ๋ฌผ์ํ๊ฐ ๋ถ์ด์๋๋ฐ, nil์ด ๋ ์ ์๋ค๋ ๊ฒ์ด๋ค. ์ฆ ํจ๊ณผ๋ง ์ฃผ๊ณ ๊ทธ๋ค์ ๋ค๋ฅธ ์์ ์ ์ํด๋ ๋๋ค๋๊ฒ! ๊ทธ๋ ๊ธฐ์ animation์ ๋ ๋ค์ด๊ฐ๋ณด๋ฉด default๊ฐ์ผ๋ก nil์ด ๋ค์ด๊ฐ์๋ค.
Alamofire Response
๋ค์ ๋ณธ๋ก ์ผ๋ก ๋ค์ด๊ฐ์ 2๋ฒ์งธ ๊ฒฝ์ฐ, ๋ฐ์ดํฐ ํ์ ์ด DataResponse๋ผ๋ ๊ฒ์ด๊ณ ๋ค์ ๊บฝ์ ๋ก ๋๊ฑด Generic์ ์๋ฏธํ๋ค.
Generic๋ ๋์ค์ ๋ค๋ฃจ๊ธฐ๋กํ๊ณ , ํจ์๋ ํด๋์ค ๊ตฌ์กฐ์ฒด ๋ฑ๋ฑ ํ๋ ์ ์ธํด์ ์ฌ๋ฌ ํ์ (String, Int ๋ฑ๋ฑ)์ ๋์ ํ๋ค ์๊ฐํ๊ณ ๋์ด๊ฐ์.
์ฌ๊ธฐ์ ์ค์ํ๊ฑด, ํต์ ํ DataResponse๋ผ๋ ํ์ ์ ๊ฐ์ง ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์์ ๋ด๊ฐ ์ฌ์ฉํ๋ค๋ ๊ฒ์ด๋ค.
์ด๊ฒ ๋ฐ๋ก ์ฐ๋ฆฌ๊ฐ ํ์ํ๊ฒ์ด๋ค. nsDictionary๋ก ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์์ ํํํ๊ณ ์ถ์ ๊ฒ์ด๋ค.
Escaping
์ฌ์ฉ๋ฒ์ ์์ Alamofire๋ณด๋ค ํจ์ฌ ๊ฐ๋จํ๋ค.
2-2 ๋ถ๋ถ์ด ์ ๋ถ์ด๋ค. ๋ฐ์์จ NSDictionary ํ์
์ ๊ฐ์ง ๋ฐ์ดํฐ ์ด๋ฆ์ nsDic
์ด๋ผ ์ด๋ฆ์ ๋ถ์ฌ์ฃผ๊ณ ์ ๋ง ๋์
๋๋ฆฌ ์ฌ์ฉํ๋ฏ ์ฌ์ฉํ๋ฉด ๋์ด๋ค.
๊ทธ ์๋์ ์ด๊ฒ์ ์์์ ์คํจํ๋ ๋ฐฉ์์ธ NSDictionary๋ฅผ return ํด์ฃผ๋ ๋ฐฉ์์ ํจ์๋ฅผ ๋ค์ ์ฌ์ฉ ํ๊ฒ์ด๋ค.
๊ทผ๋ฐ ์๋ ์ฝ์์ฐฝ์ ๋ณด๋ฉด ๋น์ฐํ์ง๋ง ์ฌ๋ฏธ๋ ์ถ๋ ฅ๋ฌผ์ด ๋ณด์ธ๋ค.
์ฌ์ฉํ๊ฑด escaping ๋ฐฉ์์ด ๋จผ์ ์ง๋ง, ์ถ๋ ฅ๋๊ฑด return ๋ฐฉ์์ ์ฌ์ฉ ํ๊ฒ์ด ๋จผ์ ์ด๋ค. ์ด์ ๋ ๋น์ฐํ๋ค๊ณ ์๊ฐ์ด ๋ค๊ฒ์ด๋ค.
๋คํธ์ํฌ๊ฐ ์๋ฌด๋ฆฌ ๋น ๋ฅด๋ค ํ๋ค ๋ก์ปฌ์ ์ฝ๋์งํ๋ณด๋ค ๋น ๋ฅผ๋ฆฌ๊ฐโฆ ๊ทธ๋ฆฌ๊ณ ๋น๋๊ธฐ๋ฐฉ์์ด๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฅํ์ผ!
๋ฒ์ธ: ๊ณตํต์ผ๋ก ์ฌ์ฉํ๋๊ฑด ์ข๋ค! ๊ทธ๋ ์ง๋ง, ํต์ ์คํจ์์ ๋ค๋ฅด๊ฒ ๋์ํ๊ณ ์ถ์๋ฐ? ํ ๊ฒฝ์ฐ
์์ ์ ์ ์ธ๊ธํ ์ผ๊ธ ํจ์์ ํน์ง์ ์ฌ์ฉํ๋ฉด ๊ฐ๋จํ๊ฒ ํด๊ฒฐ! ๋ด๊ฐ ํ๊ณ ์ถ์ ํจ์๋ฅผ ๋ง๋ค๊ณ , ์คํจ์์ ์๋ํ๊ฒ ํ๋ฉด ๊ทธ๋ง
func useEscaping(url: String, whenIfFailed: (), handler: @escaping (NSDictionary) -> Void) {
let request = Alamofire.request(url)
request.responseJSON { (response) in
switch response.result {
case .success(let obj):
guard let nsDic = obj as? NSDictionary else { return }
handler(nsDic)
case .failure(let e):
// ํต์ ์คํจ์
print(e.localizedDescription)
whenIfFailed
}
}
}
์์ ๊ฐ์ด ์ ์ด ์ฃผ์. ํ๋๊ฐ ์ถ๊ฐ ๋์๋ค. whenIfFailed
๋ผ๋ ํจ์ ํ์
์ ์ธ์์ด๋ค. ๊ทธ๋ฆฌ๊ณ ์ฃผ์ ๋ถ๋ถ์ ๋ณด๋ฉด ํต์ ์คํจ์ ์๋ํ๊ฒ ๋์ด ์๋ค.
ํ์ง๋ง, ํญ์ ์คํจ์ ๋์ ํ ํ์๊ฐ ์์ ์๋ ์๋ค. ์ ํจ์์์ ๋์ผํ๊ฒ ๋์๋๊ฒ ์ง๋๋ค๋ฉด ๊ตณ์ด ๊ทธ๋ด ํ์ ์๋ค. ๊ทธ๋ฌ๋! ํ์ํ ๊ฒฝ์ฐ๋ ์๋ค! ๊ทธ๋ ๋ค๋ฉด ์ด๋ปํ๋ฉด ์ข์๊น? whenIfFailed
๋ฅผ ์ต์
๋๋ก ํด์ฃผ๊ณ ๊ธฐ๋ณธ๊ฐ์ nil๋ก ํด์ฃผ์
func useEscaping(url: String, whenIfFailed: (() -> Void)? = nil, handler: @escaping (NSDictionary) -> Void) {
let request = Alamofire.request(url)
request.responseJSON { (response) in
switch response.result {
case .success(let obj):
guard let nsDic = obj as? NSDictionary else { return }
handler(nsDic)
case .failure(let e):
// ํต์ ์คํจ์
print(e.localizedDescription)
whenIfFailed?()
}
}
}
whenIfFailed
๋ถ๋ถ์ด ์ข ๋ฌ๋ผ์ก๋ค. (() -> Void) ๋ ๊ฐ์๊ฒ์ด๋ค. ํ์ง๋ง ๋ค์ ๋ฌผ์ํ๊ฐ ๋ถ์ด ์๊ณ , ๊ธฐ๋ณธ ๊ฐ์ด nil ๋ก ๋์ด์๋ค.
์ฆ, ํ์ ์์ผ๋ฉด ์์จ๋ ๋๋ค๋ ๊ฒ์ด๋ค. ๊ทธ ๊ฒฐ๊ณผ ์๋์ชฝ์ ๋ณด๋ฉด whenIfFailed
์ ๋ฌผ์ํ๊ฐ ๋ถ์ด์๊ณ , ์ด๋ nil์ด๋ฉด ์๋์ผ๋ก ์คํ ์๊ณ ์ง๋๊ฐ๊ฒ ๋๋ค!
์ฌ์ฉ์ ์๋์ ๊ฐ๋ค
func ifFailed() {
print("์คํจํ์ด์")
}
// ํจ์ ์ฌ์ฉ
useEscaping(url: url, whenIfFailed: ifFailed) { (nsDic) in
guard let text = nsDic["text"] as? String else { return }
print("(Escaping ์ฌ์ฉ)text: \(text)")
}
๊ทธ๋ฐ๋ฐ, ๋๋ ๊ฐ๊ฐ์ ๋ค๋ฅด๊ฒ ๋ฐ์ํ ๊ฑฐ์ผ!! ๋ผ๊ณ ํ๋ฉด, ๊ฐ ํจ์ ๋ง๋๋๊ฒ๋ ์ผ์ด๋ค. ๊ทธ๋ด ๊ฒฝ์ฐ์ ์ด๋ ๊ฒ ํด๋ณด๋๊ฑด ์ด๋จ๊น
func useEscaping(url: String, whenIfFailed: @escaping () -> Void, handler: @escaping (NSDictionary) -> Void) {
let request = Alamofire.request(url)
request.responseJSON { (response) in
switch response.result {
case .success(let obj):
guard let nsDic = obj as? NSDictionary else { return }
handler(nsDic)
case .failure(let e):
// ํต์ ์คํจ์
print(e.localizedDescription)
whenIfFailed()
}
}
}
์ฌ๊ธฐ์๋ escaping์ ์ฌ์ฉํ๋ค. ๊ทธ๋ผ ์ฌ์ฉ ์ฝ๋์์ ?
๋ง์น UIView Animation ๊ฐ๋ค.
๊ฐ์ ์ฑ์ ๋ฃ์ผ๋ฉด ์ด๋ ๊ฒ
useEscaping(url: url, whenIfFailed: {
print("์คํจํ์ด์")
}) { (nsDic) in
guard let text = nsDic["text"] as? String else { return }
print("(Escaping ์ฌ์ฉ)text: \(text)")
}
escaping์ ์๋ฉด ์์๋ก ์ ์ฉํ๊ฒ ์ฐ์ด๋ ๊ฒ ๊ฐ๋ค. ์ข ๋ ํ์ฉํ ๊ณณ์ ์ฐพ์๋ด์ผ๊ฒ ๋ค.