오늘은 챌린지과제인 Alamofire를 활용한 네트워킹 과정을 통해 내 github를 가져와 앱 만들기를 시작했다.
URLSession 보다 손쉽다고 여기저기서 얘기를 들어서 그런가.. 오히려 URLSession 보다 적용이 어렵다.. 오늘 많은 시간을 넣었지만 데이터 연동에 성공하지 못했다..
데이터만 연결되면 금방 만들 것 같은데.. 어렵다..
Alamofire 설치하기
먼저 Alamofire를 사용하려면 내 프로젝트에 깔아야 사용이 가능하니 일단 먼저 깔아보자. 원래는 홈브루를 깔아 설치하는 방법을 사용 했는데
이것보다 더 쉬운 방법인 SPM 을 사용해 손쉽게 적용시켜주었다.
먼저 프로젝트를 선택하고 여기서 상단의 Package Dependencies 를 눌러 들어가면 이렇게 넣을 수 있는 곳이 등장한다.
플러스를 눌러 해당하는 라이브러리의 깃허브 주소를 넣어주면 쉽게 넣을 수 있다.
Github API 가져오기
그 이후 깃허브 API 의 내 아이디를 넣어 접속하면 이렇게 API 정보를 받을 수 있다.
{
"login": "",
"id": ,
"node_id": "",
"avatar_url": "h",
"gravatar_id": "",
"url": "",
등 등 등
}
이 정보를 바탕으로 데이터 모델링을 동일한 이름으로 잡아준다.
struct GithubUser: Decodable {
let login: String
let name: String
let avatarUrl: String
let bio: String
enum CodingKeys: String, CodingKey {
case login
case name
case avatarUrl = "avater_url"
case bio
}
}
Decodable 프로토콜을 적용해 받아주고 변경할 이름이 있을 경우 CodingKeys 열거형을 가져와 이름을 임의로 변경해 줄 수 있다.
여기는 이전 WishList 를 만들면서 경험해 봐서 익숙해 금방 할 수 있었다.
Alamofire GET요청 함수
이제 Alamofire 를 통해 위에서 확인했던 API 데이터를 받아올 수 있도록 GET 요청 함수를 구현해보자!
먼저 새로운 파일을 하나 만들어 NetworkingManager 를 만들어 데이터 요청하는 함수를 구현한다.
final class NetworkingManager {
let url = "<https://api.github.com/users/SijongKim93>"
func fetchUser(userName: String, completion: @escaping ((Result<githubuser, error="">) -> Void)) {
let url = "\\(self.url)\\(userName)"
AF.request(url).responseDecodable(of: GithubUser.self) { response in
switch response.result {
case .success(let user):
completion(.success(user))
case .failure(let error):
completion(.failure(error))
}
}
}
}
</githubuser,>
어제 배운 Result 타입으로 코드를 간결하게 구현할 수 있다는 점이 배우니 보이기 시작하는 것 같다.
하지만 아직 내가 구현할 정도로 익숙하지 않으니 여러번 보며 이해할 수 있도록 노력하자.
URLSession 보다는 조금 더 간결하고 깔끔하게 구현할 수 있는 것 같지만 아직 처음이라 그런지 생소해서 데이터 받아오는데 아직 성공하지 못했다..
일단 데이터를 받아올 수 있는 함수를 구현했으니, 데이터를 받을 컴포넌트들이 있는 VC로 이동하자
GET 받은 데이터 연결하기
VC로 넘어왔으니 제일 먼저 해야할 건 역시 NetworkingManager 를 가져와서 변수에 담아주는 일이다.
let networkingManager = NetworkingManager()
그 이후 일단 데이터가 정상적으로 받아지고 있는지 확인해보자
networkingManager.fetchUser() { result in
switch result {
case .success(_):
print("AA")
case .failure(let error):
print(error.localizedDescription)
}
}
이렇게 넣어 데이터가 정상적으로 받아지고 있는지 확인해보니..
후.. 속상하다.. 오늘은 여기까지 해야할 것 같다.
내일은 정상적으로 데이터 연동도 되고 끝까지 다 해결해서 기쁜 마음으로 블로그를 쓸 수 있기를 기원한다..!
'◽️ Programming > T I L' 카테고리의 다른 글
[ProJect 일지] 영화 예매 앱 만들기 (1) (2) | 2024.04.22 |
---|---|
Alamofire 활용하여 내 Github 만들기 (완) (1) | 2024.04.18 |
WishList 만들기 (완) - 코어데이터 삭제 , 리프레쉬 기능 구현 (0) | 2024.04.14 |
WishList 만들기 (2) - (CoreData 연결) (0) | 2024.04.12 |
WishList 만들기 (1) - (URLSession 데이터 연결 완료) (0) | 2024.04.10 |