рдирдорд╕реНрдХрд╛рд░, рд╣реЗрдмреНрд░!
рдореЗрд░рд╛ рдирд╛рдо рдЕрд▓реЗрдХреНрдЬреЗрдВрдбрд░ рдЬрд╝рдореАрди рд╣реИ, рдореИрдВ рдмреБрд╢ рдореЗрдВ рдПрдХ рдЖрдИрдУрдПрд╕ рдбреЗрд╡рд▓рдкрд░ рд╣реВрдВред рдпрд╣ рдореЗрд░реЗ рд╕рд╣рдХрд░реНрдореА рд╢реНрд╡реЗрдм рдХреЗ рдПрдХ рд▓реЗрдЦ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЙрдиреНрд╣реЛрдВрдиреЗ рдмрддрд╛рдпрд╛ рдХрд┐ рд╕реНрд╡рд┐рдлреНрдЯ рдореЗрдВ рдлрд╝реНрд▓реИрдЯрдмреЙрд▓ рдлрдВрдХреНрд╢рди рдХреИрд╕рд╛ рдерд╛ рдФрд░ рдЗрд╕рдХреЗ рдПрдХ рдУрд╡рд░рд▓реЛрдб рдХрд╛ рдирд╛рдо рдХреЙрдореНрдкреЗрдХреНрдЯ рдореИрдк рдХреНрдпреЛрдВ рд░рдЦрд╛ рдЧрдпрд╛ рдерд╛ред рдЖрд▓реЗрдЦ
рд╕реНрд╡рд┐рдлреНрдЯ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдФрд░
рдЗрд╕рдХреЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдХрд╛рд╕ рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИред

рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ, рдПрдХ рд╕реНрдкрд╖реНрдЯ рдкрд░рд┐рднрд╛рд╖рд╛ рд╣реИ рдХрд┐
flatMap
рдлрд╝рдВрдХреНрд╢рди рдХреНрдпрд╛
flatMap
ред
flatMap
рд╡рд┐рдзрд┐ рдПрдХ рд╕реВрдЪреА рдФрд░ рдПрдХ рдкрд░рд┐рд╡рд░реНрддрди рдлрд╝рдВрдХреНрд╢рди рд▓реЗрддреА рд╣реИ (рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд▓рд┐рдП рд╢реВрдиреНрдп рдпрд╛ рдЕрдзрд┐рдХ рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ), рдЗрд╕реЗ рд╕реВрдЪреА рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдкрд░ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХрд▓ (рдЪрдкрдЯрд╛) рд╕реВрдЪреА рдмрдирд╛рддрд╛ рд╣реИред рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рд╕рд░рд▓
map
рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рднрд┐рдиреНрди рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рдорд╛рди рдкрд░ рдПрдХ рдкрд░рд┐рд╡рд░реНрддрди рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИред

рдХрдИ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП, рд╕реНрд╡рд┐рдлреНрдЯ рдореЗрдВ рдПрдХ
map
рдФрд░
flatMap
map
ред рд╣рд╛рд▓рд╛рдБрдХрд┐,
рд╕реНрд╡рд┐рдлреНрдЯ 4.1 рдореЗрдВ рдЖрдк рдЕрдм
flatMap
рдХреЛ рдореВрд▓реНрдпреЛрдВ рдХреЗ рдЕрдиреБрдХреНрд░рдо рдореЗрдВ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рднреА рдПрдХ рдкрд╛рд╕ рдХреЛ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рдорд╛рди рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рдЕрдм рдПрдХ
compactMap
рд╡рд┐рдзрд┐ рд╣реИред
рдкрд╣рд▓реЗ рддреЛ рдирд╡рд╛рдЪрд╛рд░ рдХреЗ рд╕рд╛рд░ рдХреЛ рд╕рдордЭрдирд╛ рдЗрддрдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐
flatMap
рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рддреЛ рдПрдХ рдЕрд▓рдЧ рд╡рд┐рдзрд┐ рдХреНрдпреЛрдВ рдкреЗрд╢ рдХрд░реЗрдВ? рдЪрд▓рд┐рдП рдЗрд╕рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддреЗ рд╣реИрдВред
рд╕рдВрд╕реНрдХрд░рдг 4.1 рд╕реЗ рдкрд╣рд▓реЗ рд╕реНрд╡рд┐рдлреНрдЯ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдиреЗ
flatMap
рд▓рд┐рдП рдУрд╡рд░рд▓реЛрдб рдХреЗ рддреАрди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреНрд░рджрд╛рди
flatMap
:
1. Sequence.flatMap<S>(_: (Element) -> S) -> [S.Element], S : Sequence 2. Optional.flatMap<U>(_: (Wrapped) -> U?) -> U? 3. Sequence.flatMap<U>(_: (Element) -> U?) -> [U]
рдЖрдЗрдП рддреАрдиреЛрдВ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рд╡реЗ рдХреНрдпрд╛ рдХрд░рддреЗ рд╣реИрдВред
Sequence.flatMap <S> (_: (рддрддреНрд╡) -> S) -> [S.Element], рдЬрд╣рд╛рдВ S: рдЕрдиреБрдХреНрд░рдо
рдкрд╣рд▓рд╛ рдЕрдзрд┐рднрд╛рд░ рдЕрдиреБрдХреНрд░рдореЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдмрдВрдж рдЙрд╕ рдЕрдиреБрдХреНрд░рдо рдХрд╛ рдПрдХ рддрддреНрд╡ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рджреВрд╕рд░реЗ рдЕрдиреБрдХреНрд░рдо рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛрддрд╛ рд╣реИред
flatMap
рдкрд░рд┐рдгрд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рд▓реМрдЯреЗ рдЕрдВрддрд┐рдо рдЕрдиреБрдХреНрд░рдо рдореЗрдВ рдЗрди рд╕рднреА рд░реВрдкрд╛рдВрддрд░рд┐рдд рдЕрдиреБрдХреНрд░рдореЛрдВ рдХреЛ
flatMap
ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
let array = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] let flattened = array.flatMap { $0 }
рдпрд╣ рдПрдХ рдмреЗрд╣рддрд░реАрди рдЙрджрд╛рд╣рд░рдг рд╣реИ рдХрд┐
flatMap
рд╡рд┐рдзрд┐ рдХреЛ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рдо рд╕реНрд░реЛрдд рд╕реВрдЪреА рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЛ рдмрджрд▓ (рдирдХреНрд╢рд╛) рджреЗрдВрдЧреЗ рдФрд░ рдПрдХ рдирдпрд╛ рдЕрдиреБрдХреНрд░рдо рдмрдирд╛рдПрдВрдЧреЗред
flatMap
рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж
flatMap
рдЕрдВрддрд┐рдо рдкрд░рд┐рдгрд╛рдо рд░реВрдкрд╛рдВрддрд░рд┐рдд рдЕрдиреБрдХреНрд░рдореЛрдВ рдХреА рдПрдХ рдЪрдкрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рд╣реИред
Optional.flatMap <U> (_: (рд▓рд┐рдкрдЯрд╛) -> U?) -> U?
рджреВрд╕рд░рд╛ рдЕрдзрд┐рднрд╛рд░ рд╡реИрдХрд▓реНрдкрд┐рдХ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИред рдпрджрд┐ рдЖрдк рдЬрд┐рд╕ рд╡реИрдХрд▓реНрдкрд┐рдХ рдкреНрд░рдХрд╛рд░ рдХреЛ рдХреЙрд▓ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЙрд╕рдХрд╛ рдореВрд▓реНрдп рд╣реИ, рддреЛ рдмрдВрдж рдХреЛ рд╡реИрдХрд▓реНрдкрд┐рдХ рдЖрд╡рд░рдг (рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рдореВрд▓реНрдп) рдХреЗ рдмрд┐рдирд╛ рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдЖрдк рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╡реИрдХрд▓реНрдкрд┐рдХ рдорд╛рди рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
let a: Int? = 2 let transformedA = a.flatMap { $0 * 2 }
рдЕрдиреБрдХреНрд░рдо .flatMap <U> (_: (рддрддреНрд╡) -> U?) -> [U]
рддреАрд╕рд░рд╛ рдУрд╡рд░рд▓реЛрдб рдЖрдкрдХреЛ рдпрд╣ рд╕рдордЭрдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ рдХрд┐
compactMap
рдХрд┐рд╕
compactMap
ред рдпрд╣ рд╕рдВрд╕реНрдХрд░рдг рдкрд╣рд▓реЗ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрдВрддрд░ рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдХреНрд▓реЛрдЬрд░ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реЛрддрд╛ рд╣реИред
flatMap
рдЗрд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИ, рд▓реМрдЯреЗ рд╣реБрдП рд╢реВрдиреНрдп рдорд╛рдиреЛрдВ рдХреЛ рд▓рдВрдШрди рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдмрд╛рдХреА рд╕рднреА рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рддрд╛ рд╣реИ - рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдмрд┐рдирд╛ рдЖрд╡рд░рдг рдХреЗ рдорд╛рди рдХреЗ рд░реВрдк рдореЗрдВред
let array = [1, 2, 3, 4, nil, 5, 6, nil, 7] let arrayWithoutNils = array.flatMap { $0 }
рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрджреЗрд╢ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП,
flatMap
рдпрд╣ рд╕рдВрд╕реНрдХрд░рдг рдкреВрд░реА рддрд░рд╣ рд╕реЗ
flatMap
рдХреА рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкрд░рд┐рднрд╛рд╖рд╛ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ
map
рдХрд░реАрдм рд╣реИред рдФрд░ рдЗрд╕ рдЕрдзрд┐рднрд╛рд░ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕реЗ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ
map
рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред
let array = [1, 2, 3, 4, 5, 6] let transformed = array.flatMap { $0 }
flatMap
рдХрд╛ рдпрд╣ рдЙрдкрдпреЛрдЧ рддреАрд╕рд░реЗ рдЕрдзрд┐рднрд╛рд░ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ,
flatMap
рдореЗрдВ рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдореВрд▓реНрдп рдХреЛ рд▓рдкреЗрдЯрддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдкрд░рд┐рдгрд╛рдо рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд░рдг рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИред рд╕реНрдерд┐рддрд┐ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛ рдЬрд╛рддреА рд╣реИ рдпрджрд┐ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд░реВрдкрд╛рдВрддрд░рдг рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
struct Person { let name: String } let people = [Person(name: тАЬFooтАЭ), Person(name: тАЬBarтАЭ)] let names = array.flatMap { $0.name }
рд╕рдВрд╕реНрдХрд░рдг 4.0 рд╕реЗ рдкрд╣рд▓реЗ рд╕реНрд╡рд┐рдлреНрдЯ рдореЗрдВ, рд╣рдореЗрдВ
[тАЬFooтАЭ, тАЬBarтАЭ]
рд░реВрдкрд╛рдВрддрд░рдг рдорд┐рд▓реЗрдЧрд╛ред рд▓реЗрдХрд┐рди рд╕рдВрд╕реНрдХрд░рдг 4.0 рдХреЗ рд╕рд╛рде рд╢реБрд░реВ, рд╕реНрдЯреНрд░рд┐рдВрдЧ рдорд╛рди рд╕рдВрдЧреНрд░рд╣ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рддреАрд╕рд░реЗ рдУрд╡рд░рд▓реЛрдб рдХреЗ рдмрдЬрд╛рдп, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ
flatMap
рдХрд╛ рд╣рдорд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдкрд╣рд▓реЗ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрдЧрд╛, рдФрд░ рд╣рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдореВрд▓реНрдпреЛрдВ рд╕реЗ рдПрдХ "рдЪрдкрдЯрд╛" рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓реЗрдЧрд╛:
[тАЬFтАЭ, тАЬoтАЭ, тАЬoтАЭ, тАЬBтАЭ, тАЬaтАЭ, тАЬrтАЭ]
flatMap
рдХреЙрд▓ рдХрд░рддреЗ
flatMap
рдЖрдкрдХреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рдорд┐рд▓реЗрдЧреА, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЙрдкрдпреЛрдЧ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИред рд▓реЗрдХрд┐рди рддрд░реНрдХ рдХреЛ рддреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХрд╛ рдкрд░рд┐рдгрд╛рдо
Array<Character>.Type
рд╣реИред рдЯрд╛рдЗрдк рдХрд░реЗрдВ, рдЕрдкреЗрдХреНрд╖рд┐рдд
Array<String>.Type
рдирд╣реАрдВ -
Array<String>.Type
ред
рдирд┐рд╖реНрдХрд░реНрд╖
flatMap
рдХреЗ рджреБрд░реБрдкрдпреЛрдЧ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рддреАрд╕рд░реЗ рдУрд╡рд░рд▓реЛрдб рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдирдП рд╕реНрд╡рд┐рдлреНрдЯ рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдФрд░ рдЙрд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП (
compactMap
-рдорд╛рдиреЛрдВ рдХреЛ рд╣рдЯрд╛рддреЗ рд╣реБрдП) рдЕрдм рдЖрдкрдХреЛ рдПрдХ рдЕрд▓рдЧ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ -
compactMap
ред