这段代码中 .enumerated() 和 .map() 的用途是什么?
What is the purpose of .enumerated() and .map() in this code?
我正在学习 https://www.raywenderlich.com/921-cocoa-bindings-on-macos 的教程。我想知道 .enumerated() 和 .map() 函数在本节中的作用是什么:
@IBAction func searchClicked(_ sender: Any) {
guard let resultsNumber = Int(numberResultsComboBox.stringValue)
else {
return
}
iTunesRequestManager.getSearchResults(searchTextField.stringValue, results: resultsNumber, langString: "en_us") { (results, error) in
let itunesResults = results.map {
return Result(dictionary: [=10=])
}
.enumerated()
.map({ (index, element) -> Result in
element.rank = index + 1
return element
})
DispatchQueue.main.async {
self.searchResultsController.content = itunesResults
print(self.searchResultsController.content!)
}
}
}
我通常最终可以在 Swift 中弄清楚大部分事情,但我在这里被难住了,解释性文字对我来说也不清楚。我希望有人能帮助我理解教程的这一部分。谢谢!
- 地图用于修改。此时,您基本上是通过将
results
数组作为参数来初始化 Result
的对象:
results.map {
return Result(dictionary: [=10=])
}
[=16=]
表示第一个输入。在下面的例子中,[=16=]
等于 param
(我们只是给它起了个名字):
results.map { param in
return Result(dictionary: param)
}
.enumerated()
returns 数组的每个元素及其索引号。没有它,您将只有这样的元素:
.map({ (element) -> Result in
// you don't have `index` value inside the closure anymore
// element.rank = index + 1
return element
})
请注意,上面闭包中的 element
与您在之前的 map
函数中创建的 Result(dictionary: [=21=])
对象相同。
- 最后,您通过将元素索引号增加 1 分配给元素的
rank
属性 并返回它来进行修改:
.map({ (index, element) -> Result in
// element.rank = index + 1
return element
})
注意我们在第3步之后得到的值,包括所有的修改都赋给了let itunesResults
。
我正在学习 https://www.raywenderlich.com/921-cocoa-bindings-on-macos 的教程。我想知道 .enumerated() 和 .map() 函数在本节中的作用是什么:
@IBAction func searchClicked(_ sender: Any) {
guard let resultsNumber = Int(numberResultsComboBox.stringValue)
else {
return
}
iTunesRequestManager.getSearchResults(searchTextField.stringValue, results: resultsNumber, langString: "en_us") { (results, error) in
let itunesResults = results.map {
return Result(dictionary: [=10=])
}
.enumerated()
.map({ (index, element) -> Result in
element.rank = index + 1
return element
})
DispatchQueue.main.async {
self.searchResultsController.content = itunesResults
print(self.searchResultsController.content!)
}
}
}
我通常最终可以在 Swift 中弄清楚大部分事情,但我在这里被难住了,解释性文字对我来说也不清楚。我希望有人能帮助我理解教程的这一部分。谢谢!
- 地图用于修改。此时,您基本上是通过将
results
数组作为参数来初始化Result
的对象:
results.map {
return Result(dictionary: [=10=])
}
[=16=]
表示第一个输入。在下面的例子中,[=16=]
等于 param
(我们只是给它起了个名字):
results.map { param in
return Result(dictionary: param)
}
.enumerated()
returns 数组的每个元素及其索引号。没有它,您将只有这样的元素:
.map({ (element) -> Result in
// you don't have `index` value inside the closure anymore
// element.rank = index + 1
return element
})
请注意,上面闭包中的 element
与您在之前的 map
函数中创建的 Result(dictionary: [=21=])
对象相同。
- 最后,您通过将元素索引号增加 1 分配给元素的
rank
属性 并返回它来进行修改:
.map({ (index, element) -> Result in
// element.rank = index + 1
return element
})
注意我们在第3步之后得到的值,包括所有的修改都赋给了let itunesResults
。