Как метод map работает со строковым типом? - PullRequest
0 голосов
/ 03 июня 2018

Я просматривал Alamofire исходный код, и есть фрагмент кода, который я не мог понять, как и почему он работает.

if var urlComponents = URLComponents(url: url, resolvingAgainstBaseURL: false), !parameters.isEmpty {
    let percentEncodedQuery = (urlComponents.percentEncodedQuery.map { $0 + "&" } ?? "") + query(parameters)
    urlComponents.percentEncodedQuery = percentEncodedQuery
    urlRequest.url = urlComponents.url
}

Это urlComponents.percentEncodedQuery.map { $0 + "&" } ?? ""), что я не понимаю, какэто работает и зачем это нужно.

Затем я написал свой фрагмент:

import Foundation

let a: String = "hello world"

a.map { $0 + "&" } //error: binary operator '+' cannot be applied to operands of type 'Character' and 'String'

print(a)

Но это дает ошибку в методе map.

Почему нетэта работа и какова цель urlComponents.percentEncodedQuery.map { $0 + "&" } ?? "")?

1 Ответ

0 голосов
/ 03 июня 2018

Это не map более String, это map более String? (Optional<String>).Совсем другой метод.

См. Optional.map

Оценивает данное закрытие, когда этот необязательный экземпляр не равен nil, передавая развернутое значение в качестве параметра.

В основном код можно переписать так:

(urlComponents.percentEncodedQuery?.appending("&") ?? "") + query(parameters)
...