본문 바로가기
iOS

iOS 실무11주

by asd135 2025. 5. 14.
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