gpt4 book ai didi

Swift 创建函数闭包,支持缩短的美元符号语法

转载 作者:行者123 更新时间:2023-11-30 10:12:17 25 4
gpt4 key购买 nike

我已将此扩展添加到数组

extension Array {
func each(call: (element: Element, idx: Int) -> ()) {
for (idx, element) in enumerate(self) {
call(element: element, idx: idx)
}
}
}

它基本上是 for in enumerate 的快捷方式。要使用它,我会调用这样的东西

[1, 2, 3, 4].each { element, idx in 
print(element)
return
}

这将打印有效的1234,但我希望它不需要返回。当在没有返回的 Playground 中尝试时,它会打印“0 elements”4次,而不是打印值。

我的扩展目标是使其像映射函数一样工作,这非常短且易于将函数应用于数组,但在这种情况下,在每个元素上调用函数而不改变原始元素。

[1, 2, 3, 4].map { $0 * 2 } //Converts the array to [2, 4, 6, 8]

每个都可以通过调用来完成

[1, 2, 3, 4].each { print($0); return }

这是可行的,但不是返回带有 $0 的元素,而是返回带有 (element, idx) 的元组。我可以通过使用 $0.0 作为元素和 $0.1 作为索引来非常轻松地使用它,但这感觉太笨重了。我更愿意仅使用 $0 作为元素,使用 $1 作为索引,并使用缩短的语法。我还想避免这种返回的必要性。

总而言之,我想通过将 $0 作为返回的第一个参数和 $1 来使用缩短的 $ 语法来清理我的闭包> 第二个元素,我希望在使用 println 之类的函数调用函数时不需要 return

最佳答案

Swift 2.0 已经内置了这个表达式,但如果你想自己编写它,就像简单的

extension CollectionType {    
func each(@noescape expression: (Self.Generator.Element, int) -> ()) {
for item in self {
expression(item)
}
}
}

以及索引:

extension CollectionType {    
func each(@noescape expression: (Self.Generator.Element, Int) -> ()) {
for (i, item) in self.enumerate() {
expression(item, i)
}
}
}

通过扩展CollectionType,它适用于Array和其他集合,例如Set

关于Swift 创建函数闭包,支持缩短的美元符号语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32301802/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com