Я расширил структуру URLRequest от Apple:
extension URLRequest {
mutating func addJSONContentTypeHeader() -> URLRequest {
setValue("application/json", forHTTPHeaderField: "Content-Type")
return self
}
mutating func addAuthHeader(withT t: String) -> URLRequest {
setValue(t, forHTTPHeaderField: "Auth")
return self
}
}
Я могу использовать эти методы без проблем, таких как, например ::100100
[...]
return urlRequest.addJSONContentTypeHeader()
Однако шаблон, подобный построителю, как в следующем примере, невозможен и возвращает сообщение об ошибке из заголовка:
return urlRequest.addJSONContentTypeHeader().addAuthHeader(withT: token) <--- error:
Вызов функции возвращает неизменное значение.
Однако я пометил методы расширения как "мутирующие". Единственный способ обойти это создание промежуточных элементов:
let mutableRequest = urlRequest.addJSONContentTypeHeader()
return mutableRequest.addAuthHeader(withT: token)
Тем не менее, это, конечно, не так элегантно, как построение по одной линии. Почему swiftc не позволяет мне писать так?