Building Spotify App in Swift 5 & UIKit - Part 4 (Xcode 12, 2022, Swift 5) - Build App
GET
메소드를 통해 현재 유저 프로필 정보(국가, 이름, 아이디, URL 정보 등) JSON 데이터 패치Codable
프로토콜을 따르도록 구현, JSON 디코더 사용 public func getCurrentUserProfile(completionHandler: @escaping (Result<UserProfile, Error>)->()) {
createRequest(with: URL(string: Constants.baseAPIURL + "/me"),
type: .GET) { baseRequest in
URLSession.shared.dataTask(with: baseRequest) { [weak self] data, response, error in
guard let self = self, let data = data, error == nil else {
completionHandler(.failure(APIError.failedToGetData))
return
}
do {
let result = try JSONDecoder().decode(UserProfile.self, from: data)
completionHandler(.success(result))
print(result)
} catch {
completionHandler(.failure(error))
}
}
.resume()
}
}
Get Current User's Profile
레퍼런스에 나와 있는 대로 GET
메소드를 통한 현재 유저의 프로필 정보를 리턴struct UserProfile: Codable {
let country: String
let display_name: String
let email: String
let explicit_content: [String:Bool]
let external_urls: [String:String]
// let followers: [String:Any]
let href: String
let id: String
let images: [UserImage]
let product: String
}
struct UserImage: Codable {
let url: String
}
private func fetchProfile() {
APICaller.shared.getCurrentUserProfile { [weak self] result in
guard let self = self else { return }
DispatchQueue.main.async {
switch result {
case .success(let model):
print(model)
self.updateUI(with: model)
break
case .failure(let error):
print(error.localizedDescription)
self.failedToGetProfile()
break
}
}
}
}
getCurrentUserProfile
컴플리션 핸들러가 리턴하는 결과값에 따라 테이블 뷰를 업데이트할지, 실패 레이블을 띄울지 결정