728x90
★
가져온 JSON 데이터를 그대로 사용할 수 없기 때문에 Swift 구조체에 담아서 사용
codable: JSON 등 외부 데이터와 쉽게 변환(디코드/인코드)
struct MovieData : Codable {
let boxOfficeResult : BoxOfficeResult
}
struct BoxOfficeResult : Codable {
let dailyBoxOfficeList : [DailyBoxOfficeList]
}
struct DailyBoxOfficeList : Codable {
let movieNm : String
let audiCnt : String
let audiAcc : String
let rank : String
}
func decode<T>(_ type: T.Type, from data: Data) throws -> T where T : Decodable
예외처리가 필요하다는 뜻
1위 영화와 누적 관객수를 볼 수 있음
클로저 내부에서 프로퍼티를 사용할 때는 self.를 써줘야 하는 규칙이 있음
Main Thread Checker: UI API called on a background thread: -[UITableView reloadData]에러:
Xcode에서 화면(UIView, UILabel, UITableView 등) 관련 코드를 "메인 스레드"에서만 실행해야 한다는 규칙을 검사해주는 기능
DispatchQueue.main.async {
self.table.reloadData()
}
에러를 수정하기 위해서는 비동기적으로 처리
개선 : 앱을 실행하면 어제 날짜로 자동 조회하기
어제 날짜를 구하는 메서드
func makeYesterdayString() -> String {
let calendar = Calendar.current
let today = Date()
// 1. 오늘 기준으로 날짜 계산: 하루 빼서 어제 날짜 구함
guard let yesterday = calendar.date(byAdding: .day, value: -1, to: today) else {
// 실패시 오늘 날짜 반환 등 예외처리
return ""
}
// 2. 원하는 형식의 DateFormatter 생성
let formatter = DateFormatter()
formatter.dateFormat = "yyyyMMdd"
formatter.locale = Locale(identifier: "ko_KR") // 로케일 명시(필수는 아님)
formatter.timeZone = TimeZone.current // 타임존 명시(선택)
// 3. 어제 날짜를 지정한 형식의 문자열로 변환
let result = formatter.string(from: yesterday)
return result
}
var movieURL = "https://kobis.or.kr/kobisopenapi/webservice/rest/boxoffice/searchDailyBoxOfficeList.json?key=c089c6d61a2ecc41f753f38ebe98f8fc&targetDt="
기존 URL String에 어제날짜를 더함
movieURL = movieURL + makeYesterdayString()
스택뷰
자동으로 버티컬 스택뷰로 만들어짐
스택뷰안에 스택뷰가 들어있는 구조
'iOS' 카테고리의 다른 글
iOS 실무 12주 (0) | 2025.05.21 |
---|---|
iOS 실무10주차 (0) | 2025.05.07 |
iOS 실무 9주차 (0) | 2025.05.05 |
iOS 실무 7주차 (0) | 2025.04.16 |
iOS 실무 6주차 (0) | 2025.04.09 |