According to the compiler, the closure argument for flatMap is not optional or defaulted, so it’s always required. I think it should default to { $0 }, but whatever.
Jon > On Feb 13, 2017, at 8:26 PM, Saagar Jha via swift-users > <swift-users@swift.org> wrote: > > flatMap was designed to work this way. How I rationalize it is that flatMap > “extracts” the value from an array’s elements and expands it. For an Array, > this is just taking out the individual Elements, but for an Optional, which a > “wrapper” around one value, it just takes this value out. Optionals with no > value (the .none case, or nil as it’s more commonly known) have nothing to > contribute and thus are filtered out. > > Saagar Jha > > P.S. You can call flatMap without a closure: deep.flatMap().flatMap() > >> On Feb 13, 2017, at 4:31 PM, Maxim Veksler via swift-users >> <swift-users@swift.org <mailto:swift-users@swift.org>> wrote: >> >> Hi everyone, >> >> I've discovered today that Swift will actually choose 2 very differently >> behaving types of flatMap implementation based on the input signature. >> >> For a Sequence of options it will call a flatMap that filters out nil's. For >> a Sequence of Sequence's it will call a flattening function, without >> filtering. >> >> Leading to code that (IMHO) reads very not inconsistency, and unexpected. >> Sometime even looking a bit funny such as collection.flatMap.flatMap: >> >> 5> let deep = [["1989", nil], [nil, "Red"], [nil, nil]] >> deep: [[String?]] = 3 values { >> [0] = 2 values { >> [0] = "1989" >> [1] = nil >> } >> [1] = 2 values { >> [0] = nil >> [1] = "Red" >> } >> [2] = 2 values { >> [0] = nil >> [1] = nil >> } >> } >> 6> deep.flatMap { $0 } >> $R1: [String?] = 6 values { >> [0] = "1989" >> [1] = nil >> [2] = nil >> [3] = "Red" >> [4] = nil >> [5] = nil >> } >> 7> deep.flatMap { $0 }.flatMap { $0 } >> $R2: [String] = 2 values { >> [0] = "1989" >> [1] = "Red" >> } >> I wonder why it was implemented this way? >> >> >> _______________________________________________ >> swift-users mailing list >> swift-users@swift.org <mailto:swift-users@swift.org> >> https://lists.swift.org/mailman/listinfo/swift-users > > _______________________________________________ > swift-users mailing list > swift-users@swift.org > https://lists.swift.org/mailman/listinfo/swift-users
_______________________________________________ swift-users mailing list swift-users@swift.org https://lists.swift.org/mailman/listinfo/swift-users