2016-01-27 3 views
7

ho questo pezzo di codice che funziona bene:argomenti di chiusura a cui fa riferimento la posizione all'interno di chiusura annidato in rapida

var discoverEvents = events.map { event in 
    userEvents.find { $0.eventID == event.eventID } ?? event 
} 

Mi chiedo se non v'è alcun modo per fare riferimento event dalla posizione all'interno find in qualche modo simile:

var discoverEvents = events.map { userEvents.find { $$0.eventID == $0.eventID } ?? $0 } 

per renderlo one-liner?

+2

Personalmente, spero di no, al punto di avere chiusure annidate, è meglio essere espliciti e nominare le cose. La sintassi $ posizionale è realmente intesa per cose brevi e veloci come '.map {$ 0.name}' dove puoi facilmente prendere il tutto in una sola occhiata. –

+1

@DavidBerry Sono assolutamente d'accordo, sono curioso di sapere se è possibile :) –

risposta

2

No, non è possibile. L'interno $0 ombreggia quello esterno e non c'è altro modo di fare riferimento allo $0 nell'ambito esterno.

Come @DavidBerry menziona, la sintassi è intesa per brevi funzioni anonime. Altrimenti le cose potrebbero diventare molto confuse.