Comment utiliser swift flatMap filtrer les options à partir d'un tableau

Je suis un peu confus autour de flatMap (ajouté Swift 1.2)

Dire que j'ai un tableau d'une option de type par exemple

let possibles:[Int?] = [nil, 1, 2, 3, nil, nil, 4, 5]

Dans Swift 1.1 je ferais un filtre suivie par une carte comme ceci:

let filtermap = possibles.filter({ return $0 != nil }).map({ return $0! })
// filtermap = [1, 2, 3, 4, 5]

J'ai essayé de faire cela à l'aide de flatMap un couple de façons:

var flatmap1 = possibles.flatMap({
    return $0 == nil ? [] : [$0!]
})

et

var flatmap2:[Int] = possibles.flatMap({
    if let exercise = $0 { return [exercise] }
    return []
})

Je préfère la dernière approche (parce que je n'ai pas à forcer une déballer $0!... je suis terrifié et d'éviter à tout prix), sauf que j'ai besoin de spécifier le type du Tableau.

Est-il une alternative à l'écart qui détermine le type de contexte, mais qui n'ont pas forcé déballer?

  • Vous signifiait probablement Swift 1.2 vs 1.1, il n'y a pas de Swift 1.3 (ou ai-je raté quelque chose?)
  • Opps, oui pense que j'ai eu Xcode 6.3 sur mon esprit (...) mise à jour de question - merci!
  • Bien que vous pouvez utiliser flatMap { $0 } pour supprimer nils, la vraie question est de savoir si vous. Si vous ne faites pas attention, flatMap peut conduire à des bugs, donc je vous recommande d'utiliser removeNils à la place.
InformationsquelleAutor MathewS | 2015-04-25