macOS

[iOS, macOS] PromiseKit

Daesiker 2021. 3. 23. 17:10
반응형

[참조]

 
https://www.raywenderlich.com/9208-getting-started-with-promisekit

 

PromiseKit이란?

PromiseKit은 Apple의 모든 플랫폼에서 사용가능한 오픈소스 중 하나로 비동기 프로그래밍 관련 프로젝트를 진행할 때 도와주는 프레임워크이다. 특정 순서로 작업을 진행해야하는 비동기 함수를 작성할 때 효과적으로 사용이 가능하다. Promise의 장점은 변화에 따른 주기적인 업데이트를 한다는 것이다. 오픈소스를 사용할 때 주의해야 할 점이 swift나 xcode의 업데이트에 관해서 수시적으로 프레임워크를 업데이트를 하는지이다. 이런 것을 확인하지 않고 오픈소스를 사용하다가 갑자기 프로젝트 관리가 중단되면 프로젝트 안에 관련 모든 코드를 지워야되는 경우가 생긴다. 그런 점에서 Promisekit은 릴리즈만 193개가 있을 정도로 업데이트를 빠르게 잘 진행하는 것 같다. 이번에 날씨API를 불러오는 간단한 프로젝트를 리뷰하면서 PromiseKit을 배울 예정이다.

 


시작하기

우선 여기에서 프로젝트를 다운받는다. 항상 이 사이트를 애용하는데 유료 강좌와 무료강좌로 나뉘어져있는데 무료강좌에 있는 프로젝트들이 간단하면서 핵심만 요약되어있어서 공부하기 정말 좋은 것 같다. 그리고 해당 프로젝트에 들어가서 pod을 install 해준다.

#프로젝트 파일 열기
cd 프로젝트파일 경로
#pod파일 실행
pod install

 

날씨 API Key 발급

Сurrent weather and forecast - OpenWeatherMap
Get current weather, hourly forecast, daily forecast for 16 days, and 3-hourly forecast 5 days for your city. Historical weather data for 40 years back for any coordinate. Helpful stats, graphics, and this day in history charts are available for your reference. Interactive maps show precipitation, clouds, pressure, wind around your location.
https://openweathermap.org/

해당 프로젝트에서는 openweathermap이라는 사이트에서 날씨정보를 받아와서 APP에 보여준다. 여기에 있는 데이터를 사용하기 위해서는 각자의 API키가 필요한데 해당 사이트에 들어가서 회원가입을 한 뒤 key를 발급받아햐 한다.

회원가입을 한 후 내정보에 들어가서 my API Key에 들어가면 key값을 확인할 수 있다.

 

Promise의 이해

firstly {
    //..
}.then {
    //..
}.done {
    //..
}.catch {
    //..
}.finally {
	//...
}

비동기 통신을 할 때 가장 기초적으로 쓰는 구조이다. firstly는 가장 먼저 실행할 함수를 입력하는 공간이다. firstly에서 정상적으로 통신이 되면 then 구문에 있는 함수가 실행되는데 then은 여러 개를 입력할 수 있다. then여러개 있으면 순차적으로 함수가 진행이 된다. 그리고 마지막으로 then이 끝나면 done 구간이 실행이 된다. 하지만 여기에서 하나라도 에러가 난다면 다음 구문으로 가지 않고 catch로 빠진다. 보통 catch에는 에러내용을 알려주는 내용이 들어간다. finally는 에러 여부에 상관없이 무조건 마지막에 실행되어야 하는 함수를 입력한다.

 


BrokenPromise.swift

import Foundation
import PromiseKit

func brokenPromise<T>(method: String = #function) -> Promise<T> {
  return Promise<T>() { seal in
    let err = NSError(domain: "WeatherOrNot", code: 0, userInfo: [NSLocalizedDescriptionKey: "'\(method)' not yet implemented."])
    seal.reject(err)
  }
}

PromiseKit을 import하면 새로운 자료구조 Promise를 사용할 수 있다. 제네릭(<) 기호안에 원하는 타입을 설정할 수 있고 Type Parameter인 T타입 Promise를 만들었다. Promise의 생성자인 seal에는 3가지 기능이 있다.

 

  • .fulfill : 원하는 값이 준비되면 실행이 된다.(정상적인 경우)
  • reject : 오류가 발생한 경우 Promise를 거부한다.
  • resolve : 정상적으로 실행이 되든 안되든 상관없이 값을 내보낸다.(fulfill과 reject를 합침)

 

이 코드에서는 에러를 처리하기 위한 구문이므로 reject에 대한 실행 값만 존재하고 있다. 에러가 생긴 function 값을 받아서 해당 값을 NSError로 변환한 뒤 reject 구문에서 보내준다.

 

 

반응형

'macOS' 카테고리의 다른 글

[Framework] 파인더 커스텀 FIFinderSync(2)  (0) 2021.05.03
[Framework] 파인더 커스텀 FIFinderSync(1)  (0) 2021.04.29
[Swift] Protocol(1)  (0) 2021.03.16
[Swift] UserDefaults  (0) 2021.03.15
[iOS, macOS] Alamofire Framework(3)  (2) 2021.03.11