generics - Swift create function closure with shortened dollar sign syntax support -


i've added extension array

extension array {     func each(call: (element: element, idx: int) -> ()) {         (idx, element) in enumerate(self) {             call(element: element, idx: idx)         }     } } 

it's shortcut for in enumerate. use i'd call this

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

this print 1234 works, i'd rather not require return. when tried in playground without return prints "0 elements" 4 times rather printing value.

my goal extension make work map function, short , easy apply function array, in case call function on each element without mutating original.

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

each can accomplished calling

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

this works, rather returning element $0 returns tuple (element, idx). use pretty using $0.0 element , $0.1 index, feels clunky. i'd prefer use $0 element , $1 index shortened syntax. i'd prevent return being necessary.

so in summary, i'd clean closure shortened $ syntax making $0 first argument returned , $1 second element, , i'd make return unnecessary when calling function println.

swift 2.0 have expression built in, if want write yourself, it's simple

extension collectiontype {         func each(@noescape expression: (self.generator.element, int) -> ()) {         item in self {             expression(item)         }     } } 

and index:

extension collectiontype {         func each(@noescape expression: (self.generator.element, int) -> ()) {         (i, item) in self.enumerate() {             expression(item, i)         }     } } 

by extending collectiontype works on both array , other collections, such set.


Comments

Popular posts from this blog

c# - Binding a comma separated list to a List<int> in asp.net web api -

Delphi 7 and decode UTF-8 base64 -

html - Is there any way to exclude a single element from the style? (Bootstrap) -