오늘 보고 넘어갈것들
- 박스오피스 앱만들기
- 오픈 API를 사용한 앱개발
- 코드내 관련 정보
(이번주는 사진이 굉장히 많습니다. 데이터 사용시 스압주의!)
사전 준비1. 오픈 API 수집하기
1주차나 , 전주차의 마지막을 참고해주세요!
↓ 데이터 수집을 위한 사이트 ↓
https://www.kobis.or.kr/kobisopenapi/homepg/main/main.do
영화진흥위원회 오픈API
OPEN API 서비스 영화진흥위원회 영화관입장권통합전산망에서 제공하는 오픈API 서비스로 더욱 풍요롭고 편안한 영화 서비스를 즐겨보세요.
www.kobis.or.kr
↓ 1주차의 9번을 참고하기 ! ↓
https://thisgame.tistory.com/77
iOS 프로그래밍 실무 [1주차]
이번주에 보고 넘어갈것들 - swift 개요- 전세계 시가총액- 시장 현황 분석- 안드로이드 , iOS 계열 버전 , 이쪽 분야로 취업하고자 할때- 문법 복습 1. IOS ? , iOS ? , ios 무슨차이일까? 2-1. 전세
thisgame.tistory.com
↓ 또는 9주차를 참고하기 ! ↓
https://thisgame.tistory.com/84
iOS 프로그래밍 실무 9주차 (Restful , JSON , Open API 앱 개발)
오늘 보고 넘어갈것들 - 영화 앱만들기 기반- Restful- JSON- Open API- 함수 , 클로저 , 디폴트 매개변수 준비. 영화진흥위원회의 Open API 다운받기https://www.kobis.or.kr/kobisopenapi/homepg/main/main.do 영화진흥위
thisgame.tistory.com
사전 준비2 . 앱 개발을 위한 초반 준비


1-1. 윈도우 키 + R로 정상 실행이 되는지 확인하기

1-2. 화면을 표시할 테이블뷰 추가하기


1-3. Add New constraints



1-4. Assistant editor ( ctrl + alt + command(windows key) + enter )


1-5. 테이블 뷰 아울렛 설정


1-6. 테이블 뷰는 2개의 프로토콜의 도움이 필요하므로 채택(adopt)하기



1-7-1. 오류 테스트를 위해서 임의 설정후 실행



1-7-2. 코드 수정


1-8-1. 테이블 뷰를 직접 디자인하기

1-8-2. 직접 만들경우엔 idenfier가 필요함


2. 서브 클래스 제작 ( Cocoa Touch Class )




2-1. 관리할 클래스를 연결하기
입력창에 커서를 갖다만 대도 자동 선택되지만, 가끔 안되는 경우가 있으니 잘 찾아보시길 바랍니다.


2-2. 내용을 표시할 라벨 추가하기



2-3. assistant editor를 열었는데 파일이 다른게 뜰 경우



2-4. 라벨에 아울렛 지정후 코드 수정뒤 실행



2-5. 부모 클래스를 자식 클래스로 변환해서 사용하기


2-6. Int형 값 , 배열값을 표시하는 방법


2-7. ( _: cellForRowAt:)? : 스크롤해서 표시될때마다 계속 호출


이제 거의 다 왔습니다! 이제부터 조금씩 어려울수도 있지만 끝까지 도전!
3. 네트워킹 4단계

3-1. 자신의 키가 들어간 링크를 넣고 연결하기

실행시 옵셔널 값으로 자신의 키가 들어간 영진위 api 링크가 나옵니다. (옵셔널을 풀려면 url!로 적으면 됩니다.)


3-2. 강제 언래핑 , if ~ let 보다 안전한 guard ~ let

좌측은 if ~ let을 사용한 버전 , 우측은 guard ~ let을 사용한 버전


3-3. 정보를 표시할 섹션 만들기


3-4. 어떤 섹션을 불러올지 정해주기


data의 정보를 보면 3776 바이트라고 나옵니다. (영진위 api에서 따온 코드 총합의 크기)


부록 1. 그럼 response에는 어떤 정보가?

3-5. 코드를 guard ~ let을 이용해 안전하게 처리해도 정보 크기가 안뜬다?



3-6. 정보를 String형으로 찍어보기

String형으로 찍어봤을때 데이터가 잘 불러와졌다면 성공!


4. 파싱용 구조체 만들기


4-1. 파싱을 위한 API 데이터 수집

4-2. JSON 데이터를 이용해 데이터 모델 만들기

가져온 데이터를 좌측칸에 입력하면 , 원하는 데이터만 뽑아서 사용가능한 모델로 변환시켜줍니다.


또는, 생성용 AI를 사용하여 파싱을 쉽게 하기 위해서 MovieData형 구조체를 만들어달라고 하면 만들어줍니다.
import Foundation
// 1. 박스오피스 목록의 각 영화 정보 구조체
struct DailyBoxOffice: Codable {
let rnum: String
let rank: String
let rankInten: String
let rankOldAndNew: String
let movieCd: String
let movieNm: String
let openDt: String
let salesAmt: String
let salesShare: String
let salesInten: String
let salesChange: String
let salesAcc: String
let audiCnt: String
let audiInten: String
let audiChange: String
let audiAcc: String
let scrnCnt: String
let showCnt: String
}
// 2. 전체 박스오피스 결과 구조체
struct BoxOfficeResult: Codable {
let boxofficeType: String
let showRange: String
let dailyBoxOfficeList: [DailyBoxOffice]
}
// 3. 최상위 movieData 구조체
struct MovieData: Codable {
let boxOfficeResult: BoxOfficeResult
}
let decoder = JSONDecoder()
do {
let movieData = try decoder.decode(MovieData.self, from: jsonData)
// 이제 movieData.boxOfficeResult.dailyBoxOfficeList 등으로 접근 가능
} catch {
print("파싱 실패: \(error)")
}
밑의 코드는 여태까지 작업한 코드를 한번에 작성되어 있는 코드입니다.
import UIKit
let name = ["1등","2등","3등","4등","5등"]
class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource {
@IBOutlet weak var table: UITableView!
let movieURL = "자신의 키를 넣으세요"
override func viewDidLoad() {
super.viewDidLoad()
table.delegate = self
table.dataSource = self
getData()
}
func getData() {
guard let url = URL(string: movieURL) else { return }
let session = URLSession(configuration: .default)
let task = session.dataTask(with: url) { data, response, error in
if error != nil { print(error!)
return
}
guard let JSONdata = data else { return }
let dataString = String(data: JSONdata, encoding: .utf8)
print(dataString!)
}
task.resume()
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 5
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "myCell", for:
indexPath) as! MyTableViewCell
cell.movieName.text = name[indexPath.row]
//print(indexPath.description)
return cell
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
{ print(indexPath.description) }
func numberOfSections(in tableView: UITableView) -> Int {
return 6
}
}
'실무 (iOS)' 카테고리의 다른 글
| iOS 프로그래밍 실무 12주차 [Open API 앱개발 완성하기] (0) | 2025.05.25 |
|---|---|
| iOS 프로그래밍 실무 11주차 [ Open API 기반 앱 개발 2] (0) | 2025.05.17 |
| iOS 프로그래밍 실무 9주차 (Restful , JSON , Open API 앱 개발) (4) | 2025.05.03 |
| iOS 프로그래밍 실무 (7주차) [ 클래스 , 구조체 , 열거형 ] (0) | 2025.04.19 |
| iOS프로그래밍 실무 (6주차) [옵셔널 체이닝 , Error handling , generic , array] (0) | 2025.04.10 |
댓글