UIKIt - URLComponents를 활용하여 URL 생성하기
기존에는 URL 객체를 생성할 때 아래와 같이 생성했음.
1
2
3
4
5
6
7
8
9
10
11
12
13
func list(page: Int, size: Int, title: String? = nil, userSeq: String? = nil, completionHandler: @escaping (Result<PagingResponse<[BookListResponse]>, NetworkingError>) -> Void){
// URL 객체 생성
guard let url = URL(string: "\(Constants.API_URL)/books?page=\(page)&size=\(size)&title=\(title != nil ? title! : "")&userSeq=\(userSeq != nil ? userSeq! : "")") else { return }
var request = URLRequest(url: url)
urlSession.dataTask(with: request){ data, response, error in
...
}
}
이렇게 생성하다보니 쿼리 파라미터를 붙이는데 굉장히 번거로웠고 이를 해결하기 위해서 URLComponents를 사용함.
URLComponents란 URL 객체를 구성하는 구조임. URL 객체는 read-only 이지만 URLComponents는 read, write 둘 다 가능함.
예시
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
func list(page: Int, size: Int, title: String? = nil, userSeq: String? = nil, completionHandler: @escaping (Result<PagingResponse<[BookListResponse]>, NetworkingError>) -> Void){
// URLComponents 객체 생성
guard var component = URLComponents(string: "\(Constants.API_URL)/books") else { return }
// 쿼리 스트링 추가
component.queryItems = [
URLQueryItem(name: "page", value: "\(page)"),
URLQueryItem(name: "size", value: "\(size)"),
URLQueryItem(name: "title", value: title),
URLQueryItem(name: "userSeq", value: userSeq)
]
// URL 생성
guard let url = component.url else { return }
var request = URLRequest(url: url)
urlSession.dataTask(with: request){ data, response, error in
...
}
}
This post is licensed under CC BY 4.0 by the author.