map方法如何处理字符串类型?

时间:2018-06-03 06:38:05

标签: ios swift alamofire

我一直在浏览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 :(得分:3)

它不是map超过String,而是map超过String?Optional<String>)。一种完全不同的方法。

请参阅Optional.map

  

当此Optional实例不为nil时,计算给定的闭包,将未包装的值作为参数传递。

基本上,代码可以重写为:

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