iOS Open API 기반 앱 개발 (3)

2022. 5. 26. 23:01iOS/강의 정리

반응형
iOS Open API 기반 앱 개발 (3)
 

iOS Open API 기반 앱 개발 (2)

iOS Open API 기반 앱 만들기(2) iOS) Open API 기반 iOS앱 개발 Open API 기반 iOS앱 개발 영화진흥위원회 API https://www.kobis.or.kr/kobisopenapi/homepg/main/main.do 영화진흥위원회 오픈API OPEN..

wlqkr.tistory.com

Swift에서 오류 처리 
  • 예외 처리(exception handling)
  • 런타임 시 오류를 발견하여 응답하고 복구하는 과정 
  • Swift에서는 optional을 사용하여 값의 유무를 전달함으로써 작업의 성공/실패 유무를 판단할 수 있지만 작업이 실패할 때 코드가 적절히 응답할 수 있도록 함으로써 오류의 원인을 이해하는 데 도움을 줄 수 있다.
  • 디스크상의 파일을 읽어서 처리하는 작업에서 발생할 수 있는 오류
  • Swift 2.0 이후부터는 error handling 도입 
Swift 오류 제어 
  • 오류가 발생하면 문제를 보정하는 방법을 시도하거나 사용자에게 알림으로써 오류를 처리
  • Swift에서오류를처리할수있는네가지방법 
    • Throwing Functions을 이용한 오류 전파(Propagating Errors Using Throwing Functions)
    • Do-Catch를 이용한 오류 처리(Handling Errors Using Do-Catch)
    • Error를 Optional Values로 변환(Converting Errors to Optional Values)
    • 오류 전파 비활성화(Disabling Error Propagation)
오류 발생 가능 함수의 호출 방식 (do~try~catch)
do {
try 오류 발생 코드
오류가 발생하지 않으면 실행할 코드
} catch 오류패턴1 { 처리 코드
} catch 오류패턴2 where 조건 { 처리 코드
} catch { 처리 코드
}
에러 핸들링
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()
                do {
					let decodeData = decoder.decode(MovieData.self, from: JSONdata) // JSON 객체 JSONdata를 MovieData형으로 디코딩
                } catch {
                	print(error)
                }
           }
           task.resume()
    }
}
MovieData형 프로퍼티를 만들어 decodedData에 저장
  • tableView(_:cellForRowAt:)에서 decodeData를 사용하기 위함.
  • 클로저 안에서객체의 변수 또는 함수에 접근할 때 self를 붙여서 사용해야 한다. 
var movieData: MovieData?

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()
                do {
					let decodeData = decoder.decode(MovieData.self, from: JSONdata) // JSON 객체 JSONdata를 MovieData형으로 디코딩
                    self.movieData = decodedData
                } catch {
                	print(error)
                }
           }
           task.resume()
    }
}
  • tableViewCell에 표시하기 위해 tableView(_: cellForRowAt:) 수정
cell.movieName.text = movieData?.boxOfficeResult.dailyBoxOfficeList[indexPath.row].movieNm
reloadData()
 

Apple Developer Documentation

 

developer.apple.com

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()
                do {
                	let decodeData = decoder.decode(MovieData.self, from: JSONdata) // JSON 객체 JSONdata를 MovieData형으로 디코딩
                    self.movieData = decodedData
                    DispatchQueue.main.async {
                    	self.table.reloadData()
                	}
                } catch {
                	print(error)
                }
           }
           task.resume()
    }
}

*참고 : iOS 실무 프로그래밍 2022년 3-1 한성현 교수님 강의 중 내용 or 변형 

반응형

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

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