반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- github
- Swift
- 라이트모드
- 웹뷰
- Apple
- SwiftUI
- Android
- Alamofire
- LazyHStack
- swipe
- UITabBarController
- remote config
- gcd
- Observable
- RxSwift
- string
- autolayout
- 문자열
- UIScrollView
- 다크모드
- dictionary
- Java
- Realtime Database
- SwiftLint
- ios
- WebView
- Firebase
- NavigationLink
- UIButton
- subscript
Archives
- Today
- Total
점진적 과부하 개발 블로그
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 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 주기
- dataTask(with:completionHandler:)
- https://developer.apple.com/documentation/foundation/urlsession/1410330-datatask
- 지정된 URL의 내용을 검색하는 작업을 create 한 다음, 완료시 handler(클로저) 호출
- 클로저 앞에 @escaping가 있으면 함수의 작업이 완료된 후에 클로저가 호출된다.
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 |