Я бы перевернул это так же, как Notification.Name
.Сделайте эти расширения по URL:
extension URL {
static let apiBase = URL(string: "https://api.example.com")!
static let apiUser = apiBase
static let apiEmails = apiBase.appendingPathComponent("email")
static let apiPosts = apiBase.appendingPathComponent("posts")
static func apiPost(id: String) -> URL { return apiBase.appendingPathComponent(id) }
}
Тогда вызовите это просто:
let x = URL.apiEmails
И в случаях, когда известно URL
, вам даже не нужно включать это:
let task = URLSession.shared.dataTask(with: .apiEmails)
или
let task = URLSession.shared.dataTask(with: .apiPost(id: "123"))