Swift 创建具有简化美元符号语法支持的函数闭包
Swift create function closure with shortened dollar sign syntax support
我已将此扩展添加到 Array
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
的效果,但我宁愿它不需要 return
。在没有 return 的操场上尝试时,它会打印 4 次“0 元素”而不是打印值。
我的扩展目标是让它像 map 函数一样工作,它非常简短且易于将函数应用于数组,但在这种情况下,在不改变原始元素的情况下对每个元素调用一个函数。
[1, 2, 3, 4].map { [=13=] * 2 } //Converts the array to [2, 4, 6, 8]
每一个都可以通过调用
来完成
[1, 2, 3, 4].each { print([=14=]); return }
这行得通,但是 return 元素与 [=18=]
不同,它 return 是一个带有 (element, idx)
的元组。通过对元素使用 [=20=].0
对索引使用 [=21=].1
,我可以很容易地使用它,但这感觉太笨重了。我更愿意只对元素使用 [=18=]
,对具有缩短语法的索引使用 </code>。我还想避免 return 成为必要。</p>
<p>所以总而言之,我想通过将 <code>[=18=]
作为第一个参数 returned 并将 </code> 作为第一个参数来使用缩短的 <code>$
语法清理我的闭包第二个元素,我想在使用 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
.
我已将此扩展添加到 Array
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
的效果,但我宁愿它不需要 return
。在没有 return 的操场上尝试时,它会打印 4 次“0 元素”而不是打印值。
我的扩展目标是让它像 map 函数一样工作,它非常简短且易于将函数应用于数组,但在这种情况下,在不改变原始元素的情况下对每个元素调用一个函数。
[1, 2, 3, 4].map { [=13=] * 2 } //Converts the array to [2, 4, 6, 8]
每一个都可以通过调用
来完成[1, 2, 3, 4].each { print([=14=]); return }
这行得通,但是 return 元素与 [=18=]
不同,它 return 是一个带有 (element, idx)
的元组。通过对元素使用 [=20=].0
对索引使用 [=21=].1
,我可以很容易地使用它,但这感觉太笨重了。我更愿意只对元素使用 [=18=]
,对具有缩短语法的索引使用 </code>。我还想避免 return 成为必要。</p>
<p>所以总而言之,我想通过将 <code>[=18=]
作为第一个参数 returned 并将 </code> 作为第一个参数来使用缩短的 <code>$
语法清理我的闭包第二个元素,我想在使用 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
.