앞선 글에서 URL Scheme을 통해 서로 다른 앱을 실행시키는 방법을 정리했다.
URL Scheme은 앱을 실행시키는 것 뿐만 아니라 뒤에 붙어있는 Query Parameter를 통해 데이터를 전달하여 서버에 보내거나 이후 앱에서 실행할 동작을 처리할 수 있다.
Query Parameter는 URL에서 물음표(?)부터 시작한다. 이후에는 등호(=)를 통해 key = value 형식으로 파라미터를 추가하며, 여러 개의 파라미터가 있다면 앰퍼샌드(&)로 구분되어진다.
아래의 코드는 URLComponents 메서드를 통해 쿼리 아이템을 딕셔너리에 담고, key = value로 형태로 값을 저장하는 extractQueryParameters 커스텀 메서드를 작성했다.
func extractQueryParameters(from url: URL) -> [String: String]? {
guard let components = URLComponents(url: url, resolvingAgainstBaseURL: false),
let queryItems = components.queryItems else {
return nil
}
var parameters = [String: String]()
for queryItem in queryItems {
if let name = queryItem.name, let value = queryItem.value {
parameters[name] = value
}
}
return parameters
}
if let url = URL(string: "https://example.com/path?param1=value1¶m2=value2") {
if let parameters = extractQueryParameters(from: url) {
for (name, value) in parameters {
print("\(name): \(value)")
}
}
}