ios - map 方法如何作用于字符串类型?

标签 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 + "&"} 的目的是什么? "")?

最佳答案

这不是 mapString , 这是一个 mapString? (Optional<String>)。一种完全不同的方法。

参见 Optional.map

Evaluates the given closure when this Optional instance is not nil, passing the unwrapped value as a parameter.

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

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

关于ios - map 方法如何作用于字符串类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50663895/

相关文章:

iphone - 设置委托(delegate)导致崩溃

ios - Safari 无法打开页面,因为地址无效

ios - 在 iOS 中使用 XMPP 框架进行图像共享

ios - 在上午 "A"到下午 "B"之间每隔 x 分钟重复一些操作

swift - WKInterfacePicker 的动态布局 - Swift - Watch App

ios - swift 对象映射器 : How to parse array inside of an array

ios - 使用 swift 5 请求 AlamoFire url

swift - Alamofire 请求已取消 (-999)

ios - 配置 tableview 单元格以将获取的对象传递给另一个 View (NSFetchedResultsController)

ios - 旋转景观集合View