점진적 과부하 개발 블로그

iOS Open API 기반 앱 개발 (2) 본문

iOS/강의 정리

iOS Open API 기반 앱 개발 (2)

지용빡 2022. 5. 25. 23:37
반응형
iOS Open API 기반 앱 만들기(2)
 

iOS) Open API 기반 iOS앱 개발

Open API 기반 iOS앱 개발 영화진흥위원회 API https://www.kobis.or.kr/kobisopenapi/homepg/main/main.do 영화진흥위원회 오픈API OPEN API 서비스 영화진흥위원회 영화관입장권통합전산망에서 제공하는 오..

wlqkr.tistory.com

네트워킹
  • URL 만들기
  • URLSession 만들기
  • URLSession 인스턴스에 task주기
  • task 시작하기 ( task.resume() )
movieURL지정과 데이터 가져올 메서드 지정하고 호출
  • getData() 메서드 
  • 주의 : http말고 https를 사용해야 한다. 
    • https프로토콜을 지원하지 않는 Open API를 사용할 경우에는 오류가 발생하여 다음 설정을 해야 한다.
    var movieURL = "https://kobis.or.kr/kobisopenapi/webservice/rest/boxoffice/searchDailyBoxOfficeList.json?key=키값&targetDt="

func getData() {
    }
prsent 메서드 
func present(_ viewControllerToPresent: UIViewController,
animated flag: Bool, completion: ( () -> Void)? = nil )
  • 현재 viewController 위에 표시할 ViewController
  • true는 새로운 뷰를 애니메이션하면서 보여주고, false는 애니메이션 없이 보여준다.
  • 프레젠테이션이 완료된 후 실행할 블록. 이 블록에는 반환 값이 없으며 매개 변수도 없는 클로저 작성. 특별히 하고 싶은 일이 없다면 nil로 지정하거나 디폴티 인자가 nil이므로 생략 가능 
네트워킹 1단계 : URL 만들기 
  • init?(string: string)
  • failable initializer이므로 옵셔널 바인딩을 해줘야 한다.
func getData() {
	if let url = URL(string: movieURL) {
    }
}
네트워킹 2단계 : URLSession 만들기
func getData() {
	if let url = URL(string: movieURL) {
    	let session = URLSession(configuration: .default)
    }
}
네트워킹 3단계 : URLSession 인스턴스에 task 주기 
func dataTask(with url: URL, 
completionHandler: @escaping (Data?, URLResponse?, Error?) -> Void) -> URLSessionDataTask
func getData() {
	if let url = URL(string: movieURL) {
    	let session = URLSession(configuration: .default)
        session.dataTask(with: url) { (data, response, error) in 
        
        } 
    }
}
  • completionHandler 부분을 후행 클로저로 작성 
  • 옵셔널 형이라 옵셔널 바인딩을 시켜준다. 
func getData() {
	if let url = URL(string: movieURL) {
    	let session = URLSession(configuration: .default)
        session.dataTask(with: url) { (data, response, error) in 
        	if error != nil {
            	print(error!)
                return
        } 
        if let JSONdata = data {
        		print(JSONdata)
           }
    }
}
 네트워킹 4단계 : task를 resume()
  • 작업이 일시 중단된 경우 다시 시작하는 메서드 
  • 새로 초기화된 작업은 일시 중단된 상태에서 시작되므로, 이 메서드를 호출하여 작업을 시작해야 한다. 
func getData() {
	if let url = URL(string: movieURL) {
    	let session = URLSession(configuration: .default)
        session.dataTask(with: url) { (data, response, error) in 
        	if error != nil {
            	print(error!)
                return
        } 
        if let JSONdata = data {
        		print(JSONdata)
           }
           task.resume()
    }
}
data를 String형식으로 찍어보기 
let dataString = String(data: JSONdata, encoding: .utf8)
print(dataString!) // data String으로 찍어보기
JSON 파싱을 위해 MovieData 구조체 선언 
    •  주의 : Codable 프로토콜을 준수해야 한다. 
    struct MovieData : Codable {
        
        let boxOfficeResult : BoxOfficeResult
        
    }
    
    struct BoxOfficeResult : Codable {
        
        let dailyBoxOfficeList : [DailyBoxOfficeList]
        
    }
    
    struct DailyBoxOfficeList : Codable {
        
        let movieNm : String
        
        let audiCnt : String
        
        let audiAcc : String
        
    }
JSONDecoder : JSON객체에서 데이터 타입의 인스턴스를 디코딩하는 객체
  • func decode<T>(_ type: T.Type, from data: Data) throws -> T where T : Decodable
func getData() {
	if let url = URL(string: movieURL) {
    	let session = URLSession(configuration: .default)
        session.dataTask(with: url) { (data, response, error) in 
        	if error != nil {
            	print(error!)
                return
        } 
        if let JSONdata = data { // data = Optional 형 
        		print(JSONdata.response!)
                let dataString = String(data: JSONData, encoding: .utf8)
                print(dataString!)
                let decoder = JSONDecoder()
                decoder.decode(MovieData.self, from: JSONdata) // JSON 객체 JSONdata를 MovieData형으로 디코딩
           }
           task.resume()
    }
}
  • static metatype : .self 
    • String.Type은 type이고 String.self가 metatype의 value이다. 
decoder.decode(MovieData.self, from: JSONdata) // JSON 객체 JSONdata를 MovieData형으로 디코딩
반응형

'iOS > 강의 정리' 카테고리의 다른 글

iOS Open API 기반 앱 개발 (3)  (0) 2022.05.26
iOS) Open API 기반 iOS앱 개발  (0) 2022.05.24
iOS 프로그래밍 실무 2주차 강의 정리  (0) 2022.03.16