Я немного смущен вокруг flatMap (добавлен в Swift 1.2)
Скажем, у меня есть массив некоторого необязательного типа, например.
let possibles:[Int?] = [nil, 1, 2, 3, nil, nil, 4, 5]
В Swift 1.1 я бы сделал фильтр, а затем следующую карту:
let filtermap = possibles.filter({ return $0 != nil }).map({ return $0! })
// filtermap = [1, 2, 3, 4, 5]
Я пытаюсь сделать это с помощью flatMap несколькими способами:
var flatmap1 = possibles.flatMap({
return $0 == nil ? [] : [$0!]
})
и
var flatmap2:[Int] = possibles.flatMap({
if let exercise = $0 { return [exercise] }
return []
})
Я предпочитаю последний подход (потому что мне не нужно делать принудительное разворачивание $0!
... Я боюсь за это и избегаю их любой ценой), за исключением того, что мне нужно указать тип массива.
Есть ли альтернатива, которая определяет тип по контексту, но не имеет принудительного разворота?