Карта с дополнительной разверткой в Swift
Скажем, у меня был ниже API:
func paths() -> [String?] {
return ["test", nil, "Two"]
}
И я использовал это в методе, где мне нужно [String]
следовательно, мне пришлось развернуть его с помощью простого map
функция. В настоящее время я делаю:
func cleanPaths() -> [String] {
return paths.map({$0 as! String})
}
Здесь принудительное приведение приведет к ошибке. Так что технически мне нужно развернуть строки в paths
массив. У меня возникли проблемы с этим и, похоже, я получаю глупые ошибки. Может ли кто-нибудь помочь мне здесь?
4 ответа
compactMap()
может сделать это для вас за один шаг:
let paths:[String?] = ["test", nil, "Two"]
let nonOptionals = paths.compactMap{$0}
nonOptionals
теперь будет массивом String, содержащим ["test", "Two"]
,
предварительно flatMap()
было правильным решением, но в Swift 4.1 для этой цели устарело
Сначала вы должны отфильтровать, а затем карту:
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"]