[swift-evolution] [Discussion] Updating Struct Values While Looping

Dmitri Gribenko gribozavr at gmail.com
Mon Mar 7 04:24:20 CST 2016


On Mon, Mar 7, 2016 at 12:57 AM, Paul Ossenbruggen via swift-evolution
<swift-evolution at swift.org> wrote:
>     func mutate3() {
>         for var &codon in codons {
>             if !codon.mask {
>                 codon.val += r.gauss()
>             }
>         }
>     }
> }

This would be a useful extension to the language (but it is not clear
how to define it -- do we need to hardcode the knowledge about the
MutableCollection protocol into the compiler?)

There's something you can do today, though:

extension MutableCollectionType {
  public mutating func mutatingEach(mutate: (inout Generator.Element) -> Void) {
    for i in self.indices {
      mutate(&self[i])
    }
  }
}

var a = [1,2,3]
a.mutatingEach { (x: inout Int) -> Void in x += 1 }
//a.mutatingEach { $0 += 1 } // does not work, probably due to a compiler bug.
print(a)

Dmitri

-- 
main(i,j){for(i=2;;i++){for(j=2;j<i;j++){if(!(i%j)){j=0;break;}}if
(j){printf("%d\n",i);}}} /*Dmitri Gribenko <gribozavr at gmail.com>*/


More information about the swift-evolution mailing list