Ответ 1
flatMap()
может сделать это за один шаг:
let paths:[String?] = ["test", nil, "Two"]
let nonOptionals = paths.flatMap{$0}
nonOptionals
теперь будет массивом String, содержащим ["test", "Two"]
.
Скажем, у меня было следующее api:
func paths() -> [String?] {
return ["test", nil, "Two"]
}
И я использовал это в методе, где мне нужно [String]
, поэтому мне пришлось разворачивать его с помощью простой функции map
. Я сейчас делаю:
func cleanPaths() -> [String] {
return paths.map({$0 as! String})
}
Здесь принудительное приведение приведет к ошибке. Поэтому технически мне нужно развернуть строки в массиве paths
. У меня возникли проблемы с этим и, похоже, возникают глупые ошибки. Может кто-нибудь помочь мне здесь?
flatMap()
может сделать это за один шаг:
let paths:[String?] = ["test", nil, "Two"]
let nonOptionals = paths.flatMap{$0}
nonOptionals
теперь будет массивом String, содержащим ["test", "Two"]
.
Сначала вы должны отфильтровать и отобразить следующее:
return paths.filter { $0 != .None }.map { $0 as! String }
но использование flatMap
, как было предложено @BradLarson, - это просто лучше
Возможно, вам нужно filter
, за которым следует map
:
func cleanPaths() -> [String] {
return paths()
.filter {$0 != nil}
.map {$0 as String!}
}
let x = cleanPaths()
println(x) // ["test", "two"]