URL/URLComponents는 url을 통한 서버 연결이 필요할 때 사용하는 구조체이다.
그 중 URLComponents의 경우 몸체가 되는 url과 query가 분리되어있는데 이러한 쿼리 스트링을 효율적으로(?) 지정할 수 있는 방법을
정리해두고자 한다.
만일 쿼리문의 키값이 하나만 필요하다면 다음과 같이 간단하게 쿼리스트링을 지정할 수 있을 것이다.
let bbUrl = "www.be-beee.co.kr/ios" //임의의 주소입니다.
var urlComponents = URLComponents(string: bbUrl)
urlComponents?.query = "key1=value1"
그러나 key값이 하나만 필요한 경우는 거의 없고 기본적으로 4, 5개 이상의 key값을 요구할 경우가 많았다.
그런 경우에 위의 방식은 매우 비효율적일 것이다. URLComponents를 사용하는 목적이 URL을 사용할 때의 불편함을 해소하기 위함인데 URL 타입을 그대로 사용하는 것과 다를 바가 없는 상황이 되어버린다.
이러한 경우 key, value 값을 가지는 Dictionary로 문제를 해결할 수 있다.
let query: [String:String] = [
"key1": "value1",
"key2": "value2",
"key3": "value3"
]
위와 같은 Dictionary를 생성하였을 때 이를 "key1=value1&key2=value2&key3=value3" 형태의 string으로 변환해줄 함수 또는 연산 프로퍼티를 작성하여 쿼리스트링을 편리하게 생성할 수 있다.
extension Dictionary {
var queryString: String {
var output = ""
for (key, value) in self {
output += "\(key)=\(value)&"
}
output = String(output.dropLast())
return output
}
}
위와 같은 연산프로퍼티를 통해 Dictionary 객체 내부 값을 변경하는 것만으로도 쉽게 쿼리스트링을 변경할 수 있다.
'iOS' 카테고리의 다른 글
[iOS] MVVM 폴더 구조(Folder Structure) 알아보기 (0) | 2022.05.29 |
---|---|
[iOS] 앱스토어 등록 시 표시되는 언어 바꾸기 (0) | 2022.04.11 |
[iOS] 코드로 바 버튼 아이템 추가하기 (0) | 2020.07.14 |
[iOS] UIButton 액션 코드로 추가하기 (0) | 2020.07.13 |
[iOS] URL을 통해 이미지 데이터 가져오기 (0) | 2020.07.13 |