ich ein wenig verwirrt um flatMap bin (hinzugefügt Swift 1,2)Wie rasche flatMap verwenden optionals zum Ausfiltern von einem Array
sagen, dass ich eine Reihe von Extras Typ haben z
let possibles:[Int?] = [nil, 1, 2, 3, nil, nil, 4, 5]
In Swift 1.1 ich von einer Karte wie folgt ein Filter gefolgt tun würde:
let filtermap = possibles.filter({ return $0 != nil }).map({ return $0! })
// filtermap = [1, 2, 3, 4, 5]
ich versucht habe diese ein paar Möglichkeiten, mit flatMap zu tun:
var flatmap1 = possibles.flatMap({
return $0 == nil ? [] : [$0!]
})
und
var flatmap2:[Int] = possibles.flatMap({
if let exercise = $0 { return [exercise] }
return []
})
Ich bevorzuge die letzte appr oach (weil ich keine erzwungene Unwrap machen muss $0!
... Ich habe Angst für diese und vermeiden Sie um jeden Preis) außer dass ich den Array-Typ angeben muss.
Gibt es eine Alternative, die den Typ durch Kontext ermittelt, aber nicht die erzwungene Unwrap?
Sie wahrscheinlich Swift 1.2 vs 1.1 gemeint, es gibt keine Swift 1.3 noch ist (oder habe ich etwas verpasst?) –
Upps, ja ich glaube, Xcode hatte 6.3 auf meinem Kopf ... aktualisiert Frage - Danke! – MathewS
Obwohl du * flatMap {$ 0} 'benutzen kannst, um Nils zu entfernen, ist die wirkliche Frage * solltest * du. Wenn Sie nicht vorsichtig sind, kann 'flatMap' zu Fehlern führen, daher empfehle ich stattdessen [removeNils] (http://Stackoverflow.com/a/38548106/35690). – Senseful