Swift URL query string builder and parser

Swift
import Foundation

func buildURL(_ base: String, query: [String: String]) -> URL? {
    guard var components = URLComponents(string: base) else { return nil }
    components.queryItems = query.map { URLQueryItem(name: $0.key, value: $0.value) }
    return components.url
}

func parseQuery(_ url: URL) -> [String: String] {
    guard let items = URLComponents(url: url, resolvingAgainstBaseURL: false)?.queryItems else {
        return [:]
    }
    return items.reduce(into: [String: String]()) { result, item in
        result[item.name] = item.value ?? ""
    }
}