Just replace map() with flatMap() :
extension SequenceType { /// Returns an `Array` containing the non-nil results of mapping /// `transform` over `self`. /// /// - Complexity: O(*M* + *N*), where *M* is the length of `self` /// and *N* is the length of the result. @warn_unused_result public func flatMap<T>(@noescape transform: (Self.Generator.Element) throws -> T?) rethrows -> [T] }
try? ... try? ... returns nil if the call causes an error, so those elements will be omitted as a result.
Do-it-yourself example for demonstration purposes only:
enum MyError : ErrorType { case DivisionByZeroError } func inverse(x : Double) throws -> Double { guard x != 0 else { throw MyError.DivisionByZeroError } return 1.0/x } let values = [ 1.0, 2.0, 0.0, 4.0 ] let result = values.flatMap { try? inverse($0) } print(result)
For Swift 3, replace ErrorType with Error .
source share