
рдореИрдВ рд╕рдмрд╕реЗ рд╕рд░рд▓ рддрд░реАрдХреЗ
рд╕реЗ рд╢реБрд░реБрдЖрддреА рд▓реЛрдЧреЛрдВ
рдХреЛ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЛ рдкреЗрд╢ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЗрд╕рдХреЗ рдХрдИ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рд╕реЗ рдХреБрдЫ рдлрд╛рдпрджреЗ рдкрд░ рдкреНрд░рдХрд╛рд╢ рдбрд╛рд▓рд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЛрдб рдХреЛ рдЕрдзрд┐рдХ рдкрдардиреАрдп рдФрд░ рдЕрднрд┐рд╡реНрдпрдВрдЬрдХ рдмрдирд╛ рджреЗрдЧрд╛ред рдореИрдВрдиреЗ рдЖрдкрдХреЗ рд▓рд┐рдП рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рдбреЗрдореЛ
рдирд┐рдХрд╛рд▓реЗ рдЬреЛ
рдЧрд┐рддреВрдм рдкрд░
Playground
рдкрд░ рд╣реИрдВред
рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ: рдкрд░рд┐рднрд╛рд╖рд╛
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ,
рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдПрдХ рднрд╛рд╖рд╛ рдпрд╛ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдЯрд┐рд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд╕рд░рд▓ рд▓реЛрдЧреЛрдВ рдФрд░ рдЙрдирдХреА рдмрд╛рдж рдХреА рд░рдЪрдирд╛ рдореЗрдВ рддреЛрдбрд╝рдХрд░ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдирд╛рдо рдХрд╛ рдЕрд░реНрде рд╣реИ, "
рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ, " рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд▓рд┐рдП рд░рдЪрдирд╛ рдХреА рдЗрдХрд╛рдИ рдПрдХ
рдлрд╝рдВрдХреНрд╢рди рд╣реИ ; рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ
рд╕рдорд╛рд░реЛрд╣ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдмрджрд▓рддреЗ рд░рд╛рдЬреНрдп рдпрд╛ рдЗрд╕рдХреЗ
scope)
рдмрд╛рд╣рд░ рдореВрд▓реНрдпреЛрдВ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП
scope)
ред
Swift
рд╡рд░реНрд▓реНрдб рдореЗрдВ, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рднреА рд╕реНрдерд┐рддрд┐рдпрд╛рдВ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣рд╛рдВ
рдлрд╝рдВрдХреНрд╢рди рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ
рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рд╕рдорд╛рди рдкреВрд░реНрдг рдкреНрд░рддрд┐рднрд╛рдЧреА
рд╣реИрдВ, рдФрд░
mutation
рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ
value
TYPES рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЗ рд╕реНрддрд░ рдкрд░ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рд╕рдВрд░рдЪрдирд╛рддреНрдордХ рд╕рдВрд░рдЪрдирд╛рдПрдВ рдФрд░
enum
рдПрдиреНрдпреВрдорд░реЗрд╢рди рдЬреЛ рдореНрдпреВрдЯреЗрдмрд┐рд▓рд┐рдЯреА (
mutation
рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддреЗ рд╣реИрдВред ) рдФрд░ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рдВрд╡рд╛рдж рдХрд░реЗрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдФрд░ рдХрдм рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рд╣рд╛рд▓рд╛рдБрдХрд┐,
Swift
рдкреВрд░реНрдг рдЕрд░реНрдереЛрдВ рдореЗрдВ,
рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреА рднрд╛рд╖рд╛ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдЖрдкрдХреЛ
рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣
рдХрд╛рд░реНрдпрд╛рддреНрдордХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдлрд╛рдпрджреЗ рдХреЛ рдкрд╣рдЪрд╛рдирддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдвреВрдВрдврддрд╛ рд╣реИред
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо
Swift
рдореЗрдВ
рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рддрддреНрд╡реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реЗрдВрдЧреЗ (рдЕрд░реНрдерд╛рдд, "рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░") рдФрд░ рдпрд╣ рд╕рдордЭрдХрд░ рдХрд┐ рдЖрдк рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдореЗрдВ рдХреИрд╕реЗ рдЖрд░рд╛рдо рд╕реЗ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрдореНрдкреАрд░реЗрдЯрд┐рд╡ рдПрдВрдб рдлрдВрдХреНрд╢рдирд▓ рдЕрдкреНрд░реВрд╡реНрд╕: рддреБрд▓рдирд╛
рдХрд╛рд░реНрдпрд╛рддреНрдордХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рдХреБрдЫ рд╕рд░рд▓ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреА рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рд╕реЗ рддреБрд▓рдирд╛ рдХрд░реЗрдВред рдкрд╣рд▓рд╛ рд╕рдорд╛рдзрд╛рди "
рдЗрдВрдкреАрд░рд┐рдпрд▓ " рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдХреЛрдб рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рдЕрдВрджрд░ рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрджрд▓рддрд╛ рд╣реИред
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдо
numbers
рдирд╛рдо рдмрджрд▓рдиреЗ рдпреЛрдЧреНрдп рд╕рд░рдгреА рдХреЗ рдЕрдВрджрд░ рдорд╛рдиреЛрдВ рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдХрдВрд╕реЛрд▓ рдкрд░ рдкреНрд░рд┐рдВрдЯ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рдХреЛрдб рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рдЙрддреНрддрд░ рджреЗрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ, рдЬрд┐рдирдХреА рд╣рдо рдирд┐рдХрдЯ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВрдЧреЗ:
- рдЖрдк рдЕрдкрдиреЗ рдХреЛрдб рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рд╣рд╛рд╕рд┐рд▓ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ?
- рдпрджрд┐ рдЖрдкрдХрд╛ рдХреЛрдб рдЪрд▓ рд░рд╣рд╛ рд╣реИ рддреЛ рдПрдХ рдФрд░
thread
numbers
рд╕рд░рдгреА рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИ рддреЛ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ? - рдпрджрд┐ рдЖрдк
numbers
рд╕рд░рдгреА рдореЗрдВ рдореВрд▓ рдорд╛рдиреЛрдВ рддрдХ рдкрд╣реБрдБрдЪ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ? - рдпрд╣ рдХреЛрдб рдХреИрд╕реЗ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?
рдЕрдм рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ "
рдХрд╛рд░реНрдпрд╛рддреНрдордХ " рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкрд░ рдирдЬрд░ рдбрд╛рд▓рддреЗ рд╣реИрдВ:
рдХреЛрдб рдХреЗ рдЗрд╕ рдЯреБрдХрдбрд╝реЗ рдореЗрдВ, рд╣рдо рдХрдВрд╕реЛрд▓ рдкрд░ рдПрдХ рд╣реА рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рдХрд░рддреЗ рд╣реИрдВред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЗрд╕ рдмрд╛рд░ рд╣рдорд╛рд░реЗ
numbers
рдРрд░реЗ,
let
рдХреАрд╡рд░реНрдб рдХреЗ рд▓рд┐рдП рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╣реИрдВред рд╣рдордиреЗ
numbers
рд╕рд░рдгреА рд╕реЗ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рдЧреБрдгрд╛ рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ
timesTen()
рд╡рд┐рдзрд┐ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рд╣реИ, рдЬреЛ рдХрд┐
Array
рдХреЗ рдПрдХреНрд╕рдЯреЗрдВрд╢рди
extension
рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИред рд╣рдо рдЕрднреА рднреА рд▓реВрдк рдХреЗ
for
рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░
output
рдирд╛рдордХ рдПрдХ рдЪрд░ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕ рдЪрд░ рдХрд╛ рджрд╛рдпрд░рд╛ рдХреЗрд╡рд▓ рдЗрд╕ рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рд╕реАрдорд┐рдд рд╣реИред рдЗрд╕реА рдкреНрд░рдХрд╛рд░, рд╣рдорд╛рд░рд╛ рдЗрдирдкреБрдЯ рддрд░реНрдХ
self
timesTen()
рд╡реИрд▓реНрдпреВ рдмрд╛рдп рд╡реИрд▓реНрдпреВ (
by value
) рдореЗрдВ рдЙрддреНрддреАрд░реНрдг рд╣реЛрддрд╛ рд╣реИ, рдЖрдЙрдЯрдкреБрдЯ рд╡реЗрд░рд┐рдПрдмрд▓ рдХреЗ рд╕рдорд╛рди рд╕реНрдХреЛрдк
output
ред
timesTen()
рд╡рд┐рдзрд┐ рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╣рдо рдХрдВрд╕реЛрд▓ рдкрд░ рдореВрд▓
numbers
рд╕рд░рдгреА рдФрд░ рдкрд░рд┐рдгрд╛рдо рд╕рд░рдгреА
result
рджреЛрдиреЛрдВ рдкрд░ рдкреНрд░рд┐рдВрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЖрдЗрдП рдЕрдкрдиреЗ 4 рдкреНрд░рд╢реНрдиреЛрдВ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВред
1. рдЖрдк рдЕрдкрдиреЗ рдХреЛрдб рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рд╣рд╛рд╕рд┐рд▓ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ?рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо
numbers
рд╕рд░рдгреА рдореЗрдВ
numbers
рдХреЛ
10
рд╕реЗ рдЧреБрдгрд╛ рдХрд░рдХреЗ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдХрд╛рд░реНрдп рдХрд░рддреЗ рд╣реИрдВред
рдПрдХ
рдЕрдирд┐рд╡рд╛рд░реНрдп рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде, рдЖрдЙрдЯрдкреБрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд▓реВрдк рдХреЗ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реБрдП, рдХрдВрдкреНрдпреВрдЯрд░ рдХреА рддрд░рд╣ рд╕реЛрдЪрдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдХреЛрдб рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдкрд░рд┐рдгрд╛рдо
рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред
рдХрд╛рд░реНрдпрд╛рддреНрдордХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде, "
"
timesTen()
рдкрджреНрдзрддрд┐ рдореЗрдВ "рд▓рд┐рдкрдЯрд╛" рд╣реИред рдмрд╢рд░реНрддреЗ рдХрд┐ рдпрд╣ рд╡рд┐рдзрд┐ рдХрд╣реАрдВ рдФрд░ рд▓рд╛рдЧреВ рдХреА рдЧрдИ рдереА, рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЗрд╡рд▓
numbers.timesTen()
рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред
numbers.timesTen()
рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ред рдРрд╕рд╛ рдХреЛрдб рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджрд┐рдЦрд╛рддрд╛
рдХрд┐ рдЗрд╕ рдХреЛрдб рд╕реЗ
рд╣рд╛рд╕рд┐рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рди рдХрд┐ рдЗрд╕ рдХрд╛рд░реНрдп рдХреЛ
рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕реЗ
рдбрд┐рдХреНрд▓реЗрд░реЗрдЯрд┐рд╡ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдирд╛ рдЖрд╕рд╛рди рд╣реИ рдХрд┐ рдРрд╕рд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЖрдХрд░реНрд╖рдХ рдХреНрдпреЛрдВ рд╣реИред
рдЕрдирд┐рд╡рд╛рд░реНрдп рджреГрд╖реНрдЯрд┐рдХреЛрдг рдбреЗрд╡рд▓рдкрд░ рдХреЛ рд╕рдордЭрддрд╛ рд╣реИ
рдХреЛрдб рдХреЛ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
рд╡рд╣
рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП,
рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдЗрдВрдкреАрд░рд┐рдпрд▓ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рддреБрд▓рдирд╛ рдореЗрдВ
рдХрд╛рд░реНрдпрд╛рддреНрдордХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдмрд╣реБрдд рдЕрдзрд┐рдХ "рдЕрднрд┐рд╡реНрдпрдВрдЬрдХ" рд╣реИ рдФрд░ рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдХреЗрд╡рд▓ рдпрд╣ рдорд╛рдирдиреЗ рдХрд╛ рд╢рд╛рдирджрд╛рд░ рдЕрд╡рд╕рд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рдзрд┐ рдХреНрдпрд╛ рдХрд░рдиреЗ рдХрд╛ рджрд╛рд╡рд╛ рдХрд░рддреА рд╣реИ! (рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдпрд╣ рдзрд╛рд░рдгрд╛ рдХреЗрд╡рд▓ рдкреВрд░реНрд╡-рд╕рддреНрдпрд╛рдкрд┐рдд рдХреЛрдб рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИ)ред
2. рдпрджрд┐ рдЖрдкрдХрд╛ рдХреЛрдб рдЪрд▓ рд░рд╣рд╛ рд╣реИ рддреЛ рдПрдХ рдФрд░ thread
numbers
рд╕рд░рдгреА рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИ рддреЛ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ?рдКрдкрд░ рдкреНрд░рд╕реНрддреБрдд рдЙрджрд╛рд╣рд░рдг рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ-рдерд▓рдЧ рдЬрдЧрд╣ рдореЗрдВ рдореМрдЬреВрдж рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдПрдХ рдЬрдЯрд┐рд▓ рдмрд╣реБ-рдереНрд░реЗрдбреЗрдб рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ, рдпрд╣ рдХрд╛рдлреА рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рджреЛ
threads
рдПрдХ рд╕рд╛рде рдПрдХ рд╣реА рд╕рдВрд╕рд╛рдзрдиреЛрдВ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред
рдЗрдореНрдкреАрд░рд┐рдпрд▓ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рджреЗрдЦрдирд╛ рдЖрд╕рд╛рди рд╣реИ рдХрд┐ рдЬрдм рдХрд┐рд╕реА рдЕрдиреНрдп
thread
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ
numbers
рд╕рд░рдгреА рддрдХ рдкрд╣реБрдВрдЪ рд╣реЛрддреА рд╣реИ, рддреЛ рдкрд░рд┐рдгрд╛рдо рдЙрд╕ рдХреНрд░рдо рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ
threads
numbers
рд╕рд░рдгреА рддрдХ
threads
ред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХреЛ
race condition
рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрд╕реНрдерд┐рд░рддрд╛ рдФрд░ рдЖрд╡реЗрджрди рдХреА рджреБрд░реНрдШрдЯрдирд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред
рдЗрд╕рдХреА рддреБрд▓рдирд╛ рдореЗрдВ,
рдХрд╛рд░реНрдпрд╛рддреНрдордХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдХреЛрдИ "рджреБрд╖реНрдкреНрд░рднрд╛рд╡" рдирд╣реАрдВ рд╣реИред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ,
output
рдкрджреНрдзрддрд┐ рдХрд╛
output
рд╣рдорд╛рд░реЗ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдХрд┐рд╕реА рднреА рд╕рдВрдЧреНрд░рд╣реАрдд рдореВрд▓реНрдпреЛрдВ рдХреЛ рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИ рдФрд░ рдХреЗрд╡рд▓ рдЗрдирдкреБрдЯ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдХрд┐рд╕реА рднреА рдереНрд░реЗрдб (
threads
) рдХреА
numbers
рд╕рд░рдгреА рддрдХ рдкрд╣реБрдВрдЪ рд╣реЛрддреА рд╣реИ, ALWAYS рдХреЛ рд╕рдорд╛рди рдорд╛рди рдкреНрд░рд╛рдкреНрдд рд╣реЛрдВрдЧреЗ рдФрд░ рдЗрд╕рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рд╕реНрдерд┐рд░ рдФрд░ рдЕрдиреБрдорд╛рдирд┐рдд рд╣реЛрдЧрд╛ред
3. рдпрджрд┐ рдЖрдк
numbers
рд╕рд░рдгреА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдореВрд▓ рдореВрд▓реНрдпреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛?
рдпрд╣ "рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯреНрд╕" рдХреА рд╣рдорд╛рд░реА рдЪрд░реНрдЪрд╛ рдХрд╛ рдПрдХ рд╕рд┐рд▓рд╕рд┐рд▓рд╛ рд╣реИред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рд░рд╛рдЬреНрдп рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдЯреНрд░реИрдХ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП,
рдЗрдВрдкреАрд░рд┐рдпрд▓ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде, рд╣рдо рд░реВрдкрд╛рдВрддрд░рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рджреМрд░рд╛рди рдЕрдкрдиреА
numbers
рд╕рд░рдгреА рдХреА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдерд┐рддрд┐ рдЦреЛ рджреЗрддреЗ рд╣реИрдВред
рдХрд╛рд░реНрдпрд╛рддреНрдордХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╣рдорд╛рд░рд╛ рд╕рдорд╛рдзрд╛рди, рдореВрд▓
numbers
рд╕рд░рдгреА рдХреЛ рдмрдЪрд╛рддрд╛ рд╣реИ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдкрд░ рд╡рд╛рдВрдЫрд┐рдд рдЧреБрдгреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛
result
рд╕рд░рдгреА рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдореВрд▓
numbers
рд╕рд░рдгреА рдХреЛ рдмрд░рдХрд░рд╛рд░ рд░рдЦрддрд╛ рд╣реИ рдФрд░ рднрд╡рд┐рд╖реНрдп рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИред
4. рдЗрд╕ рдХреЛрдб рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рддрдирд╛ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?
рдЪреВрдВрдХрд┐
рдХрд╛рд░реНрдпрд╛рддреНрдордХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕рднреА "рджреБрд╖реНрдкреНрд░рднрд╛рд╡реЛрдВ" рдХреЛ рдирд╖реНрдЯ рдХрд░ рджреЗрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╡рд┐рдзрд┐ рдХреЗ рдЕрдВрджрд░ рд╣реИред рдЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рдЗрдирдкреБрдЯ рдХрднреА рднреА рдХрд┐рд╕реА рднреА рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдЕрдиреБрднрд╡ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдЖрдк рдЬрд┐рддрдиреА рдмрд╛рд░ рдЪрд╛рд╣реЗрдВ рдЙрддрдиреЗ рдЪрдХреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрдИ рдмрд╛рд░ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЖрдк рд╣рдореЗрд╢рд╛ рдПрдХ рд╣реА рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкрд░реАрдХреНрд╖рдг рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред рддреБрд▓рдирд╛ рдореЗрдВ, рдПрдХ рд▓реВрдк рдореЗрдВ
рдЗрдореНрдкреАрд░реЗрдЯрд┐рд╡ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рд╕реЗ рдкреНрд░рд╡реЗрд╢ рдХреА рд╢реБрд░реБрдЖрдд рдмрджрд▓ рдЬрд╛рдПрдЧреА рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рдмрд╛рдж рдЖрдкрдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓реЗрдВрдЧреЗред
рд▓рд╛рдн рдХрд╛ рд╕рд╛рд░рд╛рдВрд╢
рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рджреЗрдЦрд╛, рдпрджрд┐ рдЖрдк рдПрдХ рдбреЗрдЯрд╛ рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ рддреЛ
рдХрд╛рд░реНрдпрд╛рддреНрдордХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдПрдХ рдЕрдЪреНрдЫреА рдмрд╛рдд рд╣реИ:
- рдпрд╣ рдШреЛрд╖рдгрд╛рддреНрдордХ рд╣реИ
- рдпрд╣
race condition
рдФрд░ рдЧрддрд┐рд░реЛрдз рдЬреИрд╕реЗ рдзрд╛рдЧреЗ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ рдХреЛ рдареАрдХ рдХрд░рддрд╛ рд╣реИ - рдпрд╣ рд░рд╛рдЬреНрдп рдХреЛ рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрд╛рдж рдХреЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
- рдпрд╣ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред
рдЖрдЗрдП,
Swift
рдореЗрдВ
рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╕реАрдЦрдиреЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рдЖрдЧреЗ рдмрдврд╝реЗрдВред рдпрд╣ рдорд╛рдирддрд╛ рд╣реИ рдХрд┐ рдореБрдЦреНрдп "рдЕрднрд┐рдиреЗрддрд╛" рдХрд╛рд░реНрдп рд╣реИрдВ, рдФрд░ рд╡реЗ рдореБрдЦреНрдп рд░реВрдк
рд╕реЗ рдкреНрд░рдердо рд╢реНрд░реЗрдгреА рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред
рдкреНрд░рдердо рд╢реНрд░реЗрдгреА рдХреЗ рдХрд╛рд░реНрдп рдФрд░ рдЙрдЪреНрдЪрддрд░ рдХреНрд░рдо рдХреЗ рдХрд╛рд░реНрдп
рдХрд┐рд╕реА рдХрд╛рд░реНрдп рдХреЛ рдкреНрд░рдердо рд╢реНрд░реЗрдгреА рдореЗрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрд╕реЗ рдПрдХ рдЪрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдЖрдкрдХреЛ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп TYPE рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдФрд░ рдЙрд╕реА рд╕рдордп рдЗрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ,
Swift
рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рдердо рд╢реНрд░реЗрдгреА рдХреА рд╡рд╕реНрддреБрдПрдВ рд╣реИрдВ, рдЕрд░реНрдерд╛рдд, рдЙрдиреНрд╣реЗрдВ рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд░рдХреЗ рд╕рдорд░реНрдерд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЙрдиреНрд╣реЗрдВ рд▓реМрдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрдиреНрд╣реЗрдВ рдЪрд░ рдореЗрдВ рдЕрд╕рд╛рдЗрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╛ рдЙрдиреНрд╣реЗрдВ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЗрд╕ рд╡рдЬрд╣ рд╕реЗ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕
Swift
рдореЗрдВ рдЕрдиреНрдп рдХрд╛рд░реНрдп рд╣реИрдВ - рдЙрдЪреНрдЪ-рдХреНрд░рдо рд╡рд╛рд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдЬрд┐рдиреНрд╣реЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдлрд╝рдВрдХреНрд╢рди рдХреЛ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрддреЗ рд╣реИрдВ рдпрд╛ рдлрд╝рдВрдХреНрд╢рди рд╡рд╛рдкрд╕ рдХрд░рддреЗ рд╣реИрдВред рдЙрдирдореЗрдВ рд╕реЗ рдХрдИ рд╣реИрдВ:
map
,
filter
,
reduce
,
forEach
,
flatMap
,
compactMap
,
sorted
, рдЖрджрд┐ред рдЙрдЪреНрдЪ рдХреНрд░рдо рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рдмрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ
map
,
filter
рдФрд░
reduce
ред рд╡реЗ рд╡реИрд╢реНрд╡рд┐рдХ рдирд╣реАрдВ рд╣реИрдВ, рд╡реЗ рдХреБрдЫ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рдХрд╛рд░ рдХреЗ "рд╕рдВрд▓рдЧреНрди" рд╣реИрдВред рд╡реЗ
Collection
рд╕рд╣рд┐рдд рд╕рднреА
Sequence
рдкреНрд░рдХрд╛рд░реЛрдВ рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ
Swift
рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдЬреИрд╕реЗ рдХрд┐
Array
, рдПрдХ
Dictionary
рдФрд░ рдПрдХ
Set
рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред
Swift 5
, рдЙрдЪреНрдЪ-рдХреНрд░рдо рдХреЗ рдХрд╛рд░реНрдп рднреА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирдП TYPE -
Result
рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред
map(_:)
Swift
map(_:)
рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд
рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
Array
рдорд╛рдиреЛрдВ рдХреЗ рдПрдХ рд╕рд░рдгреА рдореЗрдВ
map(_:)
рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рдореВрд▓ рд╕рд░рдгреА рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдлрд╝рдВрдХреНрд╢рди рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╣рдореЗрдВ рд╕рд░рдгреА рдХрд╛ рдПрдХ рд╕рд░рдгреА рдорд┐рд▓рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдорд╛рди, рд╕рд╛рде рд╣реАред
рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдореЗрдВ, рд╣рдордиреЗ рдлрд╝рдВрдХреНрд╢рди
timesTen (_:Int)
, рдЬреЛ рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ
Int
рдорд╛рди рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдкреВрд░реНрдгрд╛рдВрдХ рдорд╛рди рдХреЛ
10
рдЧреБрдгрд╛ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ рд╣рдорд╛рд░реЗ рдЙрдЪреНрдЪ-рдСрд░реНрдбрд░
map(_:)
рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдЗрдирдкреБрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдЗрд╕реЗ рд╣рдорд╛рд░реЗ рд╕рд░рдгреА рдкрд░ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред
numbers
ред
result
рд╕рд░рдгреА рдореЗрдВ рд╣рдореЗрдВ рд╡рд╣ рдкрд░рд┐рдгрд╛рдо рдЪрд╛рд╣рд┐рдП рдЬреЛ рд╣рдореЗрдВ рдЪрд╛рд╣рд┐рдПред
рдкреИрд░рд╛рдореАрдЯрд░ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдирд╛рдо рдЙрдЪреНрдЪ-рдХреНрд░рдо рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐
map(_:)
рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛, рдЗрдирдкреБрдЯ рдкреИрд░рд╛рдореАрдЯрд░
рдФрд░ рд░рд┐рдЯрд░реНрди рдорд╛рди рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВ, рдЕрд░реНрдерд╛рдд, рдлрд╝рдВрдХреНрд╢рди (рдЗрдирдкреБрдЯ) рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░
(Int) -> Int
ред рдЗрд╕рд▓рд┐рдП, рд╣рдо
map(_:)
рдореЗрдВ рдЕрдирд╛рдо рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
map(_:)
- рдХреНрд▓реЛрдЬрд╝рд░ - рдХрд┐рд╕реА рднреА рд░реВрдк рдореЗрдВ, рдЬрд┐рдирдореЗрдВ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рддрд░реНрдХ рдирд╛рдо
$0
,
$1
, рдЖрджрд┐ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
рдпрджрд┐ рд╣рдо рдПрдХ
Array
рд▓рд┐рдП
map(_ :)
рдлрд╝рдВрдХреНрд╢рди рджреЗрдЦреЗрдВ, рддреЛ рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗ рд╕рдХрддрд╛ рд╣реИ:
func map<T>(_ transform: (Element) -> T) -> [T] { var returnValue = [T]() for item in self { returnValue.append(transform(item)) } return returnValue }
рдпрд╣ рдПрдХ рдЕрдирд┐рд╡рд╛рд░реНрдп рдХреЛрдб рд╣реИ рдЬреЛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдкрд░рд┐рдЪрд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдм рдПрдХ рдбреЗрд╡рд▓рдкрд░ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдПрдХ
Apple
рд╕рдорд╕реНрдпрд╛ рд╣реИ, рдПрдХ
Swift
рд╕рдорд╕реНрдпрд╛ рд╣реИред рдЙрдЪреНрдЪ-рдХреНрд░рдо
map(_:)
рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ
Apple
рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рд╣рдо, рдбреЗрд╡рд▓рдкрд░реНрд╕,
map(_:)
рдЧрд╛рд░рдВрдЯреА рджреЗрддреЗ рд╣реИрдВ
map(_:)
рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛, рдЗрд╕рд▓рд┐рдП рд╣рдо рдХреЗрд╡рд▓
transform
рддрд░реНрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╡реНрдпрдХреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо
рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдХрд┐рдП рдмрд┐рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЗрд╕реЗ
рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдирддреАрдЬрддрди, рд╣рдореЗрдВ рдПрдХ рдкрдВрдХреНрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрдардиреАрдп рдХреЛрдб рдорд┐рд▓рддрд╛ рд╣реИ, рдЬреЛ рдмреЗрд╣рддрд░ рдФрд░ рддреЗрдЬреА рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред
рдкреИрд░рд╛рдореАрдЯрд░ рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдпрд╛ рдЧрдпрд╛
рдореВрд▓ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреЗ
рд╕рд╛рде рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкреВрд░реНрдгрд╛рдВрдХреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛
possibleNumbers
, рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рд╣рдо рдЙрдиреНрд╣реЗрдВ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
{ str in Int(str) }
ред рд╣рдо
map(_:)
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ
map(_:)
рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ
Optional
рдХрд╛ рдПрдХ
mapped
рд╕рд░рдгреА рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ:

рд╣рдо рдЕрдкрдиреЗ рд╕рд░рдгреА
possibleNumbers
рддрддреНрд╡реЛрдВ рдХреЛ рдкреВрд░реНрдгрд╛рдВрдХреЛрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо
рдереЗ, рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдПрдХ рднрд╛рдЧ рдХреЛ рдорд╛рди рдкреНрд░рд╛рдкреНрдд рд╣реБрдЖ,
String
рдХреЛ рдкреВрд░реНрдгрд╛рдВрдХ
Int
рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрд╕рдВрднрд╡рддрд╛ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░рд╛ рднрд╛рдЧ рдСрдкреНрдЯрд┐рдХреНрд╕ рдореЗрдВ рдмрджрд▓ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдореВрд▓реНрдп рд╣реИрдВ:
print (mapped)
compactMap(_ :)
рдпрджрд┐ рдЙрдЪреНрдЪ-рдХреНрд░рдо рдлрд╝рдВрдХреНрд╢рди рдХреЛ рджрд┐рдП рдЧрдП рдкреИрд░рд╛рдореАрдЯрд░ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рдкрд░ рдПрдХ
Optional
рдорд╛рди рд╣реИ, рддреЛ рдпрд╣ рдЙрдЪреНрдЪ рдЖрджреЗрд╢ рдХреЗ рдХрд┐рд╕реА рдЕрдиреНрдп рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЕрд░реНрде рдореЗрдВ рд╕рдорд╛рди рд╣реИ -
compactMap(_ :)
, рдЬреЛ
map(_:)
рдХреЗ рд╕рдорд╛рди рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ
map(_:)
, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛
Optional
рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдореВрд▓реНрдпреЛрдВ рдХреЛ "рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд" рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕рдВрдЧреНрд░рд╣ рд╕реЗ
nil
рдорд╛рди рдирд┐рдХрд╛рд▓рддрд╛ рд╣реИред

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдореЗрдВ
compactMapped
рдЯрд╛рдЗрдк рдХреА рдПрдХ рд╕рд░рдгреА
compactMapped
[Int]
, рд▓реЗрдХрд┐рди рд╕рдВрднрд╡рддрдГ рдЫреЛрдЯреА рд╣реИ:
let possibleNumbers = ["1", "2", "three", "///4///", "5"] let compactMapped = possibleNumbers.compactMap(Int.init) print (compactMapped)

рдЬрдм рднреА рдЖрдк
init?()
рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ
init?()
compactMap(_ :)
рд░реВрдк рдореЗрдВ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХрд╛рд░реНрдп, рдЖрдкрдХреЛ
compactMap(_ :)
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
рдореБрдЭреЗ рдпрд╣ рдХрд╣рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЙрдЪреНрдЪ-рдХреНрд░рдо рдлрд╝рдВрдХреНрд╢рди
compactMap(_ :)
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╕реЗ рдЕрдзрд┐рдХ рдХрд╛рд░рдг рд╣реИрдВред
Swift
"рдкреНрдпрд╛рд░"
Optional
рдореВрд▓реНрдпреЛрдВ, рд╡реЗ рди рдХреЗрд╡рд▓ "
failable
"
failable
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
init?()
failable
, рд▓реЗрдХрд┐рди рдпрд╣ рднреА рдХреЗ
as?
рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ
as?
"рдХрд╛рд╕реНрдЯрд┐рдВрдЧ"
:
let views = [innerView,shadowView,logoView] let imageViews = views.compactMap{$0 as? UIImageView}
... рдФрд░
try?
рдЬрдм рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреБрдЫ рддрд░реАрдХреЛрдВ рд╕реЗ рдлреЗрдВрдХ рджрд┐рдпрд╛ред рдореБрдЭреЗ рдХрд╣рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐
Apple
рдЪрд┐рдВрддрд┐рдд рд╣реИ рдХрд┐
try?
рдХрд╛ рдЙрдкрдпреЛрдЧ
try?
рдмрд╣реБрдд рдмрд╛рд░ рдбрдмрд▓
Optional
рдУрд░ рдЬрд╛рддрд╛ рд╣реИ рдФрд░
рд╕реНрд╡рд┐рдлреНрдЯ 5 рдореЗрдВ рдЕрдм
try?
рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдХреЗрд╡рд▓ рдПрдХ
Optional
рд╕реНрддрд░ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ
try?
ред
рдЙрдЪреНрдЪ рдХреНрд░рдо рд╡рд╛рд▓реЗ
flatMap(_ :)
рдирд╛рдо рдкрд░ рдПрдХ рдФрд░ рд╕рдорд╛рди рдХрд╛рд░реНрдп рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рдХрдо рд╣реИред
рдХрднреА-рдХрднреА, рдЙрдЪреНрдЪ-рдХреНрд░рдо рдлрд╝рдВрдХреНрд╢рди
map(_:)
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
zip (_:, _:)
рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЕрдиреБрдХреНрд░рдореЛрдВ рд╕реЗ рдЬреЛрдбрд╝реЗ рдХреЗ рдЕрдиреБрдХреНрд░рдо рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП
zip (_:, _:)
рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реЛрддрд╛ рд╣реИред
рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ
view
рд╣реИ рдЬрд┐рд╕ рдкрд░ рдХрдИ рдмрд┐рдВрджреБрдУрдВ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдПрдХ рд╕рд╛рде рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ рдФрд░ рдПрдХ рдЯреВрдЯреА рд╣реБрдИ рд░реЗрдЦрд╛ рдмрдирддреА рд╣реИ:

рд╣рдореЗрдВ рдореВрд▓ рдЯреВрдЯреА рд░реЗрдЦрд╛ рдХреЗ рдЦрдВрдбреЛрдВ рдХреЗ рдордзреНрдп рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рд╡рд╛рд▓реА рдПрдХ рдФрд░ рдЯреВрдЯреА рд╣реБрдИ рд░реЗрдЦрд╛ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

рдХрд┐рд╕реА рдЦрдВрдб рдХреЗ рдордзреНрдп рдмрд┐рдВрджреБ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреЛ рдмрд┐рдВрджреБрдУрдВ рдХрд╛ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП: рд╡рд░реНрддрдорд╛рди рдФрд░ рдЕрдЧрд▓рд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЕрдВрдХреЛрдВ рдХреЗ рдЬреЛрдбрд╝реЗ рд╕реЗ рдорд┐рд▓рдХрд░ рдПрдХ рдЕрдиреБрдХреНрд░рдо рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ - рд╡рд░реНрддрдорд╛рди рдФрд░ рдЕрдЧрд▓рд╛ -
zip (_:, _:)
рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдмрд┐рдВрджреБ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдмрд┐рдВрджреБрдУрдВ рдХреЗ рд╕рд░рдгреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
points.dropFirst()
:
let pairs = zip (points,points.dropFirst()) let averagePoints = pairs.map { CGPoint(x: ($0.x + $1.x) / 2, y: ($0.y + $1.y) / 2 )}
рдЗрд╕ рддрд░рд╣ рдХреЗ рдЕрдиреБрдХреНрд░рдо рдХреЗ рдмрд╛рдж, рд╣рдо рдмрд╣реБрдд рдЖрд╕рд╛рдиреА рд╕реЗ рдЙрдЪреНрдЪ-рдХреНрд░рдо рдлрд╝рдВрдХреНрд╢рди
map(_:)
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдорд┐рдбрдкреЙрдЗрдВрдЯ рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЧреНрд░рд╛рдлрд╝ рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВред
filter (_:)
Swift
, рдЙрдЪреНрдЪ-рдХреНрд░рдо рдлрд╝рдВрдХреНрд╢рди
filter (_:)
рдЕрдзрд┐рдХрд╛рдВрд╢
рдЙрдкрд▓рдмреНрдз рд╣реИ
рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП
map(_:)
рдлрд╝рдВрдХреНрд╢рди рдЙрдкрд▓рдмреНрдз рд╣реИред рдЖрдк рдХрд┐рд╕реА рднреА
Sequence
рджреГрд╢реНрдпреЛрдВ рдХреЛ
filter (_:)
рд╕рд╛рде
filter (_:)
рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ!
filter (_:)
рд╡рд┐рдзрд┐ рдПрдХ рдЕрдиреНрдп рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрддреА рд╣реИ, рдЬреЛ рдЕрдиреБрдХреНрд░рдо рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рдПрдХ рд╢рд░реНрдд рд╣реИ, рдФрд░ рдпрджрд┐ рд╕реНрдерд┐рддрд┐ рд╕рдВрддреБрд╖реНрдЯ рд╣реИ, рддреЛ рддрддреНрд╡ рдкрд░рд┐рдгрд╛рдо рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИ, рдФрд░ рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдпрд╣ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИред рдпрд╣ "рдЕрдиреНрдп рдлрд╝рдВрдХреНрд╢рди" рдПрдХ рдПрдХрд▓ рдорд╛рди рд▓реЗрддрд╛ рд╣реИ -
Sequence
рдЕрдиреБрдХреНрд░рдо рдХрд╛ рдПрдХ рддрддреНрд╡ - рдФрд░ рдПрдХ
Bool
рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рддрдерд╛рдХрдерд┐рдд рд╡рд┐рдзреЗрдпред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
Array
рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдЙрдЪреНрдЪ-рдХреНрд░рдо рдлрд╝рдВрдХреНрд╢рди
filter (_:)
рд╡рд┐рдзреЗрдп рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдореВрд▓ рд╕рд░рдгреА рдХреЗ рдЙрди рддрддреНрд╡реЛрдВ рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдпреБрдХреНрдд рдПрдХ рдФрд░ рд╕рд░рдгреА рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЗрдирдкреБрдЯ рд╡рд┐рдзреЗрдп рдлрд╝рдВрдХреНрд╢рди
true
рджреЗрддрд╛
true
ред
рдпрд╣рд╛рдВ, рдЙрдЪреНрдЪ-рдХреНрд░рдо рдлрд╝рдВрдХреНрд╢рди
filter (_:)
numbers
рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЛ рд╕рд░рдгреА рд▓реЗрддрд╛ рд╣реИ (
$0
рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ) рдФрд░ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рддрддреНрд╡ рд╕рдорд╛рди рд╕рдВрдЦреНрдпрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рдПрдХ рд╕рдорд╛рди рд╕рдВрдЦреНрдпрд╛ рд╣реИ, рддреЛ
numbers
рд╕рд░рдгреА рдХреЗ рддрддреНрд╡ рдирдП
filted
рд╕рд░рдгреА рдореЗрдВ рдЖрддреЗ рд╣реИрдВ, рдЕрдиреНрдпрдерд╛ рдирд╣реАрдВред рд╣рдордиреЗ рдПрдХ рдШреЛрд╖рдгрд╛рддреНрдордХ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рд╕реВрдЪрд┐рдд рдХрд┐рдпрд╛ рдХрд┐ рд╣рдо
рд╕реЗ рдПрдЪрдУрд╡реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рджреЗрдЦрднрд╛рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╣рдореЗрдВ рдЗрд╕реЗ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдореИрдВ рдЙрдЪреНрдЪ-рдХреНрд░рдо рдлрд╝рдВрдХреНрд╢рди
filter (_:)
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг рджреВрдВрдЧрд╛
filter (_:)
рдорд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рдХреЗрд╡рд▓ рдкрд╣рд▓реЗ
20
рдлрд╛рдЗрдмреЛрдиреИрдЪрд┐ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
< 4000
:
let fibonacci = sequence(first: (0, 1), next: { ($1, $0 + $1) }) .prefix(20).map{$0.0} .filter {$0 % 2 == 0 && $0 < 4000} print (fibonacci)
рд╣рдореЗрдВ рдЯрд┐рдмрд▓реНрд╕ рдХрд╛ рдПрдХ рдЕрдиреБрдХреНрд░рдо рдорд┐рд▓рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдлрд┐рдмреЛрдирд╛рдЪреА рдЕрдиреБрдХреНрд░рдо рдХреЗ рджреЛ рддрддреНрд╡ рд╣реЛрддреЗ рд╣реИрдВ: n-th рдФрд░ (n + 1) -he:
(0, 1), (1, 1), (1, 2), (2, 3), (3, 5) тАж
рдЖрдЧреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП, рд╣рдо
prefix (20)
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рддрддреНрд╡реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдЗрдХреНрдХреАрд╕рд╡реЗрдВ рддрддреНрд╡ рддрдХ рд╕реАрдорд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░
map {$0.0 }
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЧрдард┐рдд рдЯрдкрд▓ рдХреЗ
0
рддрддреНрд╡ рдХреЛ рд▓реЗрддреЗ рд╣реИрдВ, рдЬреЛ
0
рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдлрд╛рдЗрдмреЛрдиреИрдЪрд┐ рдЕрдиреБрдХреНрд░рдо рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрдЧрд╛:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584,...
рд╣рдо
map {$0.1 }
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЧрдард┐рдд рдЯрдкрд▓ рдХрд╛
1
рддрддреНрд╡ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ
1
рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдлрд╛рдЗрдмреЛрдиреИрдЪрд┐ рдЕрдиреБрдХреНрд░рдо рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрдЧрд╛:
1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584,...
рд╣рдореЗрдВ рдЙрдЪреНрдЪ-рдХреНрд░рдо рдлрд╝рдВрдХреНрд╢рди
filter {$0 % 2 == 0 && $0 < 4000}
рдХреА рд╕рд╣рд╛рдпрддрд╛ рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рддрддреНрд╡ рдорд┐рд▓рддреЗ рд╣реИрдВ, рдЬреЛ рджрд┐рдП рдЧрдП рд╡рд┐рдзреЗрдп рдХреЛ рд╕рдВрддреБрд╖реНрдЯ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреБрдХреНрд░рдо рддрддреНрд╡реЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рджреЗрддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдкреВрд░реНрдгрд╛рдВрдХреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рд╣реЛрдЧреА
[Int]
:
[0, 2, 8, 34, 144, 610, 2584]
Collection
рд▓рд┐рдП
filter (_:)
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рдЙрдкрдпреЛрдЧреА рдЙрджрд╛рд╣рд░рдг рд╣реИред
рдореБрдЭреЗ
рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдорд╕реНрдпрд╛ рддрдм
рдЖрдИ рдЬрдм рдЖрдкрдХреЗ рдкрд╛рд╕
CollectionView
images
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рджрд░реНрд╢рд┐рдд
images
рдХрд╛ рдПрдХ рд╕рдореВрд╣ рд╣реИ, рдФрд░ рдЖрдк
Drag & Drop
рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ
images
рдХрд╛ рдПрдХ рдкреВрд░рд╛ "рдкреИрдХ" рдПрдХрддреНрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ "рдбрдВрдкрд┐рдВрдЧ" рд╕рд╣рд┐рдд рд╣рд░ рдЬрдЧрд╣ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрдЪрд░рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред "

рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, "рдХрдЪрд░рд╛
removedIndexes
" рдореЗрдВ рдбрдВрдк рдХрд┐рдП рдЧрдП
removedIndexes
рдХреЗ рдЕрдиреБрдХреНрд░рдорд┐рдд рд╕реВрдЪрдХрд╛рдВрдХ рдХреЗ рд╕рд░рдгреА рдХреЛ рдареАрдХ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЖрдкрдХреЛ рдЙрди рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдПрдХ рдирдпрд╛ рд╕рд░рдгреА рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬрд┐рдиреНрд╣реЗрдВ рдЫреЛрдбрд╝рдХрд░ рдЙрди рд╕рднреА рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рдирдХреЗ рд╕реВрдЪрдХрд╛рдВрдХ рд╕рд░рдгреА рдореЗрдВ
removedIndexes
ред рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкреВрд░реНрдгрд╛рдВрдХ
images
рдХреА рдПрдХ рд╕рд░рдгреА рд╣реИ рдЬреЛ
images
рдирдХрд▓ рдХрд░рддреА рд╣реИ, рдФрд░ рдЗрди рдкреВрд░реНрдгрд╛рдВрдХреЛрдВ рдХреЗ рд╕реВрдЪрдХрд╛рдВрдХреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рд╣рдЯрд╛ рджреА рдЬрд╛рддреА рд╣реИ рдФрд░ рдЬреЛ рд╣рдЯрд╛рдП рдЬрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╣рдо рдЕрдкрдиреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
filter (_:)
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ:
var images = [6, 22, 8, 14, 16, 0, 7, 9] var removedIndexes = [2,5,0,6] var images1 = images .enumerated() .filter { !removedIndexes.contains($0.offset) } .map { $0.element } print (images1)
enumerated()
рд╡рд┐рдзрд┐
offset
рд╕реВрдЪрдХрд╛рдВрдХреЛрдВ рдФрд░ рд╕рд░рдгреА
element
рдорд╛рдиреЛрдВ рд╕реЗ рдорд┐рд▓рдХрд░ рдЯреНрдпреВрдкрд▓реНрд╕ рдХрд╛ рдПрдХ рдХреНрд░рдо рд▓реМрдЯрд╛рддреА рд╣реИред
рдлрд┐рд░ рд╣рдо filter
рдЯреНрдпреВрд▓ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЕрдиреБрдХреНрд░рдо рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рд┐рд▓реНрдЯрд░ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ , рдХреЗрд╡рд▓ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдЬрд┐рдирдХреЗ рд╕реВрдЪрдХрд╛рдВрдХ $0.offset
рд╕рд░рдгреА рдореЗрдВ рдирд┐рд╣рд┐рдд рдирд╣реАрдВ рд╣реИрдВ removedIndexes
ред рдЕрдЧрд▓рд╛ рдХрджрдо, рд╣рдо рдЯрдкрд▓ рд╕реЗ рдореВрд▓реНрдп рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ $0.element
рдФрд░ рд╣рдореЗрдВ рдЬрд┐рд╕ рд╕рд░рдгреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЙрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ images1
редreduce (_:, _:)
рд╡рд┐рдзрд┐ reduce (_:, _:)
рднреА
рдЙрдкрд▓рдмреНрдз map(_:)
рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИ filter (_:)
ред рд╡рд┐рдзрд┐ reduce (_:, _:)
" Sequence
рдПрдХрд▓ рд╕рдВрдЪрдп рдореВрд▓реНрдп рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреНрд░рдо" рдврд╣ рдЬрд╛рддреА рд╣реИ рдФрд░ рджреЛ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВред рдкрд╣рд▓рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рд╢реБрд░реБрдЖрддреА рд╕рдВрдЪрдп рдореВрд▓реНрдп рд╣реИ, рдФрд░ рджреВрд╕рд░рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ Sequence
рдирдП рд╕рдВрдЪрдп рдореВрд▓реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреНрд░рдо рддрддреНрд╡ рдХреЗ рд╕рд╛рде рд╕рдВрдЪрдп рдореВрд▓реНрдп рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ редрдЗрдирдкреБрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЕрдиреБрдХреНрд░рдо рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ Sequence
, рдПрдХ рдХреЗ рдмрд╛рдж рдПрдХ, рдЬрдм рддрдХ рдпрд╣ рдЕрдВрдд рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪрддрд╛ рд╣реИ рдФрд░ рдЕрдВрддрд┐рдо рд╕рдВрдЪрдп рдореВрд▓реНрдп рдмрдирд╛рддрд╛ рд╣реИред let sum = Array (1...100).reduce(0, +)
рдпрд╣ рдПрдХ рдЙрдЪреНрдЪ рдХреНрд░рдо рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рддреБрдЪреНрдЫ рдЙрджрд╛рд╣рд░рдг рд╣реИ reduce (_:, _:)
- рдХрд┐рд╕реА рд╕рд░рдгреА рдХреЗ рддрддреНрд╡реЛрдВ рдХрд╛ рдпреЛрдЧ рдЧрд┐рдирдирд╛ Array
ред 1 0 1 0 +1 = 1 2 1 2 2 + 1 = 3 3 3 3 3 + 3 = 6 4 6 4 4 + 6 = 10 . . . . . . . . . . . . . . . . . . . 100 4950 100 4950 + 100 = 5050
рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, reduce (_:, _:)
рд╣рдо рдмрд╣реБрдд рд╣реА рд╕рд░рд▓рддрд╛ рд╕реЗ рдлрд╛рдЗрдмреЛрдиреИрдЪрд┐ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреА рдЧрдгрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдВрддреБрд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ: let fibonacci = sequence(first: (0, 1), next: { ($1, $0 + $1) }) .prefix(20).map{$0.0} .filter {$0 % 2 == 0 && $0 < 4000} print (fibonacci)
рд▓реЗрдХрд┐рди рдПрдХ рдЙрдЪреНрдЪ рдХреНрд░рдо рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╣реИрдВ reduce (_:, _:)
редрдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдмрд╣реБрдд рд╣реА рд╕рд░рд▓рддрд╛рдкреВрд░реНрд╡рдХ рдФрд░ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд░реВрдк рд╕реЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреИрд░рд╛рдореАрдЯрд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ UIScrollView
- "рд╕реНрдХреНрд░реЙрд▓ рдХрд░рдиреЗ рдпреЛрдЧреНрдп" рдХреНрд╖реЗрддреНрд░ рдХрд╛ contentSize
рдЖрдХрд╛рд░ - рдЗрд╕рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЗ рдЖрдзрд╛рд░ рдкрд░ subviews
: let scrollView = UIScrollView() scrollView.addSubview(UIView(frame: CGRect(x: 300.0, y: 0.0, width: 200, height: 300))) scrollView.addSubview(UIView(frame: CGRect(x: 100.0, y: 0.0, width: 300, height: 600))) scrollView.contentSize = scrollView.subviews .reduce(CGRect.zero,{$0.union($1.frame)}) .size
рдЗрд╕ рдбреЗрдореЛ рдореЗрдВ, рд╕рдВрдЪрдп рдореВрд▓реНрдп рд╣реИ
GCRect
, рдФрд░ рд╕рдВрдЪрдп рдСрдкрд░реЗрд╢рди union
рдЖрдпрддреЛрдВ рдХреЗ рд╕рдВрдпреЛрдЬрди рдХрд╛ рд╕рдВрдЪрд╛рд▓рди рд╣реИ рдЬреЛ frame
рд╣рдорд╛рд░реЗ рд╣реИрдВ subviews
редрдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдЙрдЪреНрдЪ-рдХреНрд░рдо рдлрд╝рдВрдХреНрд╢рди reduce (_:, _:)
рдПрдХ рд╕рдВрдЪрд┐рдд рдЪрд░рд┐рддреНрд░ рдХреЛ рдорд╛рдирддрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рдкрд░рд┐рдкреНрд░реЗрдХреНрд╖реНрдп рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЯреНрдпреВрдкрд▓ рдХреА рдПрдХ рд╕рд░рдгреА рдореЗрдВ рдПрдХ рдЯрдкрд▓ рдХреЛ рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:
рд╕реНрд╡рд┐рдлреНрдЯ 4.2
рдиреЗ рдПрдХ рдирдП рдкреНрд░рдХрд╛рд░ рдХреЗ рдЙрдЪреНрдЪ рдХреНрд░рдо рдлрд╝рдВрдХреНрд╢рди рдХреА рд╢реБрд░реБрдЖрдд рдХреА reduce (into:, _:)
ред рд╡рд┐рдзрд┐ рдХреЗ reduce (into:, _:)
рд╕рд╛рде рддреБрд▓рдирд╛ рдореЗрдВ рджрдХреНрд╖рддрд╛ рдореЗрдВ рдмреЗрд╣рддрд░ рд╣реИ , рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╛ reduce (:, :)
рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ред рдкреВрд░реНрдгрд╛рдВрдХ рдХреА рдПрдХ рд╕рд░рдгреА рдореЗрдВ рдорд┐рд▓рд╛рди рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:COW (copy-on-write)
Array
Dictionary
... рдпрд╛ рд╕рд░рдгреА рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рддрддреНрд╡реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рдЧрд┐рдирддреА рдХрд░рддреЗ рд╕рдордп:
flatMap (_:)
рдЗрд╕ рдЙрдЪреНрдЪ рдХреНрд░рдо рдлрд╝рдВрдХреНрд╢рди рдкрд░ рдЬрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдЗрдП рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдбреЗрдореЛ рджреЗрдЦреЗрдВред let maybeNumbers = ["42", "7", "three", "///4///", "5"] let firstNumber = maybeNumbers.map (Int.init).first
рдпрджрд┐ рд╣рдо рдЗрд╕ рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрд▓рд╛рддреЗ рд╣реИрдВ Playground
, рддреЛ рд╕рдм рдХреБрдЫ рдЕрдЪреНрдЫрд╛ рджрд┐рдЦрддрд╛ рд╣реИ, рдФрд░ рд╣рдорд╛рд░рд╛ firstNumber
рд╕рдорд╛рди рд╣реИ 42
:
рд▓реЗрдХрд┐рди, рдпрджрд┐ рдЖрдк рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ Playground
рдЕрдХреНрд╕рд░ рд╕рдЪ рдХреЛ рдЫреБрдкрд╛рддрд╛ рд╣реИ
, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ
рд╕реНрдерд┐рд░ firstNumber
ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕реНрдерд┐рд░рд╛рдВрдХ firstNumber
рдореЗрдВ
рджреЛ рдЪреАрдЬреЗрдВ рд╣реЛрддреА рд╣реИрдВ Optional
:
рдпрд╣ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ map (Int.init)
рдЖрдЙрдЯрдкреБрдЯ рдкрд░ рдпрд╣ Optional
TYPE рдорд╛рдиреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдмрдирд╛рддрд╛ рд╣реИ [Int?]
, рдХреНрдпреЛрдВрдХрд┐ рд╣рд░ рдкрдВрдХреНрддрд┐ String
рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реИ Int
рдФрд░ рдЗрдирд┐рд╢рд▓рд╛рдЗрдЬрд╝рд░ Int.int
"рдЧрд┐рд░ рд░рд╣рд╛ рд╣реИ" ( failable
) рд╣реИред рдлрд┐рд░ рд╣рдо рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд╛ рдЧрдарди рд╕рд░рдгреА рдХреЗ рдкрд╣рд▓реЗ рддрддреНрд╡ рд▓реЗрдиреЗ first
рд╡рд╛рд▓реЛрдВ рдХреЗ рд▓рд┐рдП Array
рд╣реИ, рдЬреЛ рднреА рдЙрддреНрдкрд╛рджрди рд░реВрдкреЛрдВOptional
, рдХреНрдпреЛрдВрдХрд┐ рд╕рд░рдгреА рдЦрд╛рд▓реА рд╣реЛ рд╕рдХрддреА рд╣реИ рдФрд░ рд╣рдо рд╕рд░рдгреА рдХрд╛ рдкрд╣рд▓рд╛ рддрддреНрд╡ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред рдирддреАрдЬрддрди, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдбрдмрд▓ рд╣реИ Optional
, рдЬреЛ рд╣реИ Int??
редрд╣рдореЗрдВ рдПрдХ рдиреЗрд╕реНрдЯреЗрдб рд╕рдВрд░рдЪрдирд╛ Optional
рдорд┐рд▓реА рд╣реИ Optional
рдЬрд┐рд╕рдореЗрдВ рдХрд╛рдо рдХрд░рдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реИ рдФрд░ рдЬрд┐рд╕реЗ рд╣рдо рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЗрд╕ рдиреЗрд╕реНрдЯреЗрдб рд╕рдВрд░рдЪрдирд╛ рд╕реЗ рдореВрд▓реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рджреЛ рд╕реНрддрд░реЛрдВ рдореЗрдВ "рдЧреЛрддрд╛" рд▓рдЧрд╛рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдХреЛрдИ рднреА рдЕрддрд┐рд░рд┐рдХреНрдд рдкрд░рд┐рд╡рд░реНрддрди рд╕реНрддрд░ рдХреЛ рдФрд░ Optional
рднреА рдХрдо рдХрд░ рд╕рдХрддрд╛ рд╣реИредрдбрдмрд▓ рдиреЗрд╕реНрдЯреЗрдб рд╕реЗ рдмрд╛рд╣рд░ рдореВрд▓реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ Optional
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмреЛрдЭ рд╣реИредрд╣рдорд╛рд░реЗ рдкрд╛рд╕ 3 рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ рдФрд░ рдЙрди рд╕рднреА рдХреЛ рднрд╛рд╖рд╛ рдХреЗ рдЧрд╣рди рдЬреНрдЮрд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ Swift
редif let
, ; ┬л┬╗ ┬л┬╗ Optional
, тАФ ┬л┬╗ Optional
:

if case let
( pattern match
) :

??
:

- ,
switch
:

рдЗрд╕рд╕реЗ рднреА рдмрджрддрд░,
рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд ( generic
) рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдХрд┐рд╕реА рднреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдРрд╕реА рдШреЛрдВрд╕рд▓реЗ рдХреЗ рд╢рд┐рдХрд╛рд░ рдХреА рд╕рдорд╕реНрдпрд╛рдПрдВ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИрдВ , рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдСрдкрд░реЗрд╢рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ map
ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП Array
редрдПрдХ рдЕрдиреНрдп рдЙрджрд╛рд╣рд░рдг рдХреЛрдб рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдмрд╣реБ-рдкрдВрдХреНрддрд┐ рдкрд╛рда рд╣реИ multilineString
рдЬрд┐рд╕реЗ рд╣рдо рд▓реЛрдЕрд░рдХреЗрд╕ (рдЫреЛрдЯреЗ) рдЕрдХреНрд╖рд░реЛрдВ рдореЗрдВ рд▓рд┐рдЦреЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ: let multilineString = """ , , ; , тАФ , : тАФ , . , , . . , , ┬л ┬╗ . , , ! """ let words = multilineString.lowercased() .split(separator: "\n") .map{$0.split(separator: " ")}
рд╢рдмреНрджреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП words
, рд╣рдо рдкрд╣рд▓реЗ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрд░рдХреЗрд╕ (рдмрдбрд╝реЗ) рдЕрдХреНрд╖рд░реЛрдВ рдХреЛ рдЫреЛрдЯрд╛ (рдЫреЛрдЯрд╛) рдмрдирд╛рддреЗ рд╣реИрдВ lowercased()
, рдлрд┐рд░ рд╣рдо рдкрд╛рда рдХреЛ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП split(separatot: "\n")
рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рдПрдХ рд╕рд░рдгреА рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ map {$0.split(separator: " ")}
рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╢рдмреНрджреЛрдВ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВредрдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдореЗрдВ рдиреЗрд╕реНрдЯреЗрдб рдПрд░реЗ рдорд┐рд▓рддреЗ рд╣реИрдВ: [["", ",", "", ","], ["", "", ";", "", "", "", "", ",", "тАФ"], ["", ",", "", "", ":"], ["", "тАФ", "", "", ",", "", "", "."], ["", "", ",", "", "", ","], ["", "", ".", "", ""], ["", ".", "", ",", ""], ["", "", "", ""], ["", "", ",", "", "┬л", "┬╗"], ["", ".", "", ","], ["", ",", "", "", "!"]]
... рдФрд░ words
рдПрдХ
рдбрдмрд▓ Array
:
рдПрдХ рдмрд╛рд░ рдлрд┐рд░, рд╣рдо рдбреЗрдЯрд╛ рдХреА рдПрдХ "рдиреЗрд╕реНрдЯреЗрдб" рд╕рдВрд░рдЪрдирд╛ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдЗрд╕ рдмрд╛рд░ рд╣рдо рдирд╣реАрдВ рдерд╛ Optional
, рдФрд░ Array
ред рдпрджрд┐ рд╣рдо words
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреНрд░рд╛рдкреНрдд рд╢рдмреНрджреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ , рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рдмрд╣реБ-рдкрдВрдХреНрддрд┐ рдкрд╛рда рдХреЗ рдкрддреНрд░ рд╕реНрдкреЗрдХреНрдЯреНрд░рдо рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП, рддреЛ рд╣рдореЗрдВ рдкрд╣рд▓реЗ рдХрд┐рд╕реА рддрд░рд╣ рд╕реЗ рдбрдмрд▓ рдХреЗ рд╕рд░рдгреА рдХреЛ "рд╕реАрдзрд╛" рдХрд░рдирд╛ рд╣реЛрдЧрд╛ Array
рдФрд░ рдЗрд╕реЗ рдПрдХрд▓ рдХреЗ рдПрдХ рд╕рд░рдгреА рдореЗрдВ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ Array
ред рдпрд╣ Optional
рдЗрд╕ рдЦрдВрдб рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдПрдХ рдбреЗрдореЛ рдХреЗ рд▓рд┐рдП рдбрдмрд▓ рдХреЗ рд╕рд╛рде рд╣рдордиреЗ рдХреНрдпрд╛ рдХрд┐рдпрд╛ рд╣реИ flatMap
: let maybeNumbers = ["42", "7", "three", "///4///", "5"] let firstNumber = maybeNumbers.map (Int.init).first
рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, Swift
рд╣рдореЗрдВ рдЬрдЯрд┐рд▓ рд╡рд╛рдХреНрдп рдирд┐рд░реНрдорд╛рдг рдХрд╛ рд╕рд╣рд╛рд░рд╛ рдирд╣реАрдВ рд▓реЗрдирд╛ рдкрдбрд╝реЗрдЧрд╛ред Swift
рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рд╣рдореЗрдВ рдЖрдкреВрд░реНрддрд┐ рдХрд░рддрд╛ рд╣реИ Array
рдФрд░ Optional
ред рдпрд╣ рдПрдХ рдЙрдЪреНрдЪ рдХреНрд░рдо рдлрд╝рдВрдХреНрд╢рди рд╣реИ flatMap
! рдпрд╣ рдмрд╣реБрдд рд╕рдорд╛рди рд╣реИ map
, рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ "рд╕рдВрд▓рдЧреНрдирдХ" рдХреЗ рдмрд╛рдж рдХреЗ "рд╕реАрдзреЗ" рд╕реЗ рдЬреБрдбрд╝реА рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╣реИ рдЬреЛ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ map
ред рдФрд░ рдЗрд╕реАрд▓рд┐рдП рдЗрд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ flatMap
, рдпрд╣ "рд╕реАрдзрд╛" ( flattens
) рдкрд░рд┐рдгрд╛рдо рд╣реИ map
редрдЖрдЗрдП рд▓рд╛рдЧреВ flatMap
рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ firstNumber
:
рд╣рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХрд▓ рд╕реНрддрд░ рдХреЗ рд╕рд╛рде рдЖрдЙрдЯрдкреБрдЯ рдорд┐рд▓рд╛ Optional
ред рдПрдХ рд╕рд░рдгреА рдХреЗ рд▓рд┐рдПрдФрд░ рднреА рджрд┐рд▓рдЪрд╕реНрдк flatMap
рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ Array
ред рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореЗрдВ, words
рд╣рдо рдмрд╕ рдХреЗ map
рд╕рд╛рде рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВflatMap
:
... рдФрд░ рд╣рдореЗрдВ words
рдмрд┐рдирд╛ рдХрд┐рд╕реА "рдиреЗрд╕реНрдЯрд┐рдВрдЧ" рдХреЗ рдХреЗрд╡рд▓ рд╢рдмреНрджреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдорд┐рд▓рддреА рд╣реИ : ["", ",", "", ",", "", "", ";", "", "", "", "", ",", "тАФ", "", ",", "", "", ":", "", "тАФ", "", "", ",", "", "", ".", "", "", ",", "", "", ",", "", "", ".", "", "", "", ".", "", ",", "", "", "", "", "", "", "", ",", "", "┬л", "┬╗", "", ".", "", ",", "", ",", "", "", "!"]
рдЕрдм рд╣рдо рд╢рдмреНрджреЛрдВ рдХреЗ рдкрд░рд┐рдгрд╛рдореА рд╕рд░рдгреА рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдЬрд╛рд░реА рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ words
, рд▓реЗрдХрд┐рди рд╕рд╛рд╡рдзрд╛рди рд░рд╣реЗрдВред рдпрджрд┐ рд╣рдо рдЗрд╕реЗ flatMap
рд╕рд░рдгреА рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдкрд░ рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ words
, рддреЛ рд╣рдо, рд╢рд╛рдпрдж, рдПрдХ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд, рд▓реЗрдХрд┐рди рдХрд╛рдлреА рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗред
рд╣рдореЗрдВ [Character]
рдЕрдкрдиреЗ рдмрд╣реБ-рдкрдВрдХреНрддрд┐ рд╡рд╛рдХреНрдпрд╛рдВрд╢ рдореЗрдВ рдирд┐рд╣рд┐рдд рдЕрдХреНрд╖рд░реЛрдВ рдФрд░ рдкреНрд░рддреАрдХреЛрдВ рдХреЗ "рдиреЗрд╕реНрдЯреЗрдб" рд╕рд░рдгреА рдирд╣реАрдВ, рдПрдХ рдПрдХрд▓ рдорд┐рд▓рддрд╛ рд╣реИ : ["", "", "", "", "", "", "", "", "", "", "", "", ",", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ",", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ";", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ...]
рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкрд╛рддреНрд░реЛрдВ String
рдХрд╛ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рд╣реИ рдФрд░, рдкреНрд░рддреНрдпреЗрдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╢рдмреНрдж рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реБрдП, рд╣рдо рдПрдХ рдмрд╛рд░ рдлрд┐рд░ "рдиреЗрд╕реНрдЯрд┐рдВрдЧ" рдХреЗ рд╕реНрддрд░ рдХреЛ рдХрдо рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╡рд░реНрдгреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдореЗрдВ рдЖрддреЗ рд╣реИрдВ ред рд╢рд╛рдпрдж рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдпрд╛ рд╢рд╛рдпрдж рдирд╣реАрдВред рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВредCollection
[Character]
flatMap
flattenCharacters
рдпрд╣ рд╕рдм рдПрдХ рд╕рд╛рде рд░рдЦрдирд╛: рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдирд╛
TASK рез
рд╣рдо рдкрд┐рдЫрд▓реЗ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рд╢рдмреНрдж рд╕рд░рдгреА рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЬрд╛рд░реА рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреА рд╣рдореЗрдВ рдЬрд╝рд░реВрд░рдд рд╣реИ words
рдФрд░ рд╣рдорд╛рд░реЗ рдмрд╣реБ-рдкрдВрдХреНрддрд┐ рд╡рд╛рдХреНрдпрд╛рдВрд╢ рдореЗрдВ рдЕрдХреНрд╖рд░реЛрдВ рдХреА рдШрдЯрдирд╛ рдХреА рдЖрд╡реГрддреНрддрд┐ рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВред рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рд╕рд░рдгреА рдХреЗ рд╕рднреА рд╢рдмреНрджреЛрдВ words
рдХреЛ рдПрдХ рдмрдбрд╝реА рд▓рд╛рдЗрди рдореЗрдВ "рдЧреЛрдВрдж" рдХрд░реЗрдВ рдФрд░ рдЗрд╕рдореЗрдВ рд╕реЗ рд╕рднреА рд╡рд┐рд░рд╛рдо рдЪрд┐рд╣реНрдиреЛрдВ рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВ, рдЕрд░реНрдерд╛рдд рдХреЗрд╡рд▓ рдЕрдХреНрд╖рд░реЛрдВ рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВ: let wordsString = words.reduce ("",+).filter { "" .contains($0)}
рдЗрд╕рд▓рд┐рдП, рд╣рдореЗрдВ рд╡реЗ рд╕рднреА рдкрддреНрд░ рдорд┐рд▓реЗ рдЬрд┐рдирдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЕрдм рдЪрд▓реЛ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рдХреБрдВрдЬреА key
рдЕрдХреНрд╖рд░ рд╣реИ, рдФрд░ рдореВрд▓реНрдп value
рдкрд╛рда рдореЗрдВ рдЗрд╕рдХреА рдШрдЯрдирд╛ рдХреА рдЖрд╡реГрддреНрддрд┐ рд╣реИредрд╣рдо рдЗрд╕реЗ рджреЛ рддрд░реАрдХреЛрдВ рд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВредрдкрд╣рд▓реА рд╡рд┐рдзрд┐Swift 4.2
рдПрдХ рдЙрдЪреНрдЪ рдХреНрд░рдо рдлрд╝рдВрдХреНрд╢рди рдХреА рдирдИ рд╡рд┐рд╡рд┐рдзрддрд╛ рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рдЬреБрдбрд╝реА рд╣реИ рдЬреЛ рдЗрд╕рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреА рд╣реИ reduce (into:, _:)
ред letterCount
рд╣рдорд╛рд░реЗ рдмрд╣реБ-рдкрдВрдХреНрддрд┐ рд╡рд╛рдХреНрдпрд╛рдВрд╢ рдореЗрдВ рдЕрдХреНрд╖рд░реЛрдВ рдХреА рдШрдЯрдирд╛ рдХреА рдЖрд╡реГрддреНрддрд┐ рдХреЗ рд╕рд╛рде рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╡рд┐рдзрд┐ рдХрд╛рдлреА рдЙрдкрдпреБрдХреНрдд рд╣реИ : let letterCount = wordsString.reduce(into: [:]) { counts, letter in counts[letter, default: 0] += 1} print (letterCount)
рдирддреАрдЬрддрди, рд╣рдореЗрдВ рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рдорд┐рд▓реЗрдЧрд╛ letterCount
[Character : Int]
рдЬрд┐рд╕рдореЗрдВ рдЪрд╛рдмрд┐рдпрд╛рдБ key
рдЕрдзреНрдпрдпрди рдХреЗ рддрд╣рдд рд╡рд╛рдХреНрдпрд╛рдВрд╢ рдореЗрдВ рдкрд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╡рд░реНрдг рд╣реИрдВ, рдФрд░ рдорд╛рди рдХреЗ рд░реВрдк value
рдореЗрдВ рдЗрди рд╡рд░реНрдгреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИредрджреВрд╕рд░реА рд╡рд┐рдзрд┐ рдореЗрдВ рд╕рдореВрд╣ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╢рдмреНрджрдХреЛрд╢ рдХреЛ рдЖрд░рдВрдн рдХрд░рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЬреЛ рд╕рдорд╛рди рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИ: let letterCountDictionary = Dictionary(grouping: wordsString ){ $0}.mapValues {$0.count} letterCount == letterCountDictionary
рд╣рдо рд╢рдмреНрджрдХреЛрд╢ рдХреЛ letterCount
рд╡рд░реНрдгрд╛рдиреБрдХреНрд░рдо рдореЗрдВ рдХреНрд░рдордмрджреНрдз рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ : let lettersStat = letterCountDictionary .sorted(by: <) .map{"\($0.0):\($0.1)"} print (lettersStat)
рд▓реЗрдХрд┐рди рд╣рдо рд╕реАрдзреЗ рд╢рдмреНрджрдХреЛрд╢ рдХреЛ рдХреНрд░рдордмрджреНрдз рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ Dictionary
, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдореМрд▓рд┐рдХ рд░реВрдк рд╕реЗ рдПрдХ рдЖрджреЗрд╢рд┐рдд рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рд╣рдо рдлрд╝рдВрдХреНрд╢рди sorted (by:)
рдХреЛ рд╢рдмреНрджрдХреЛрд╢ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ Dictionary
, рддреЛ рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рджрд┐рдП рдЧрдП рдЕрдиреБрдХреНрд░рдо рдХреЗ рддрддреНрд╡реЛрдВ рдХреЛ рдирд╛рдорд┐рдд рдЯреНрдпреВрдкрд▓реНрд╕ рдХреЗ рдПрдХ рд╕рд░рдгреА рдХреЗ рд░реВрдк рдореЗрдВ рджрд┐рдП рдЧрдП рд╡рд┐рдзреЗрдп рдХреЗ рд╕рд╛рде рдЫрд╛рдВрдЯреЗрдЧрд╛, рдЬрд┐рд╕реЗ map
рд╣рдо [":17", ":5", ":18", ...]
рд╕рдВрдмрдВрдзрд┐рдд рдЕрдХреНрд╖рд░ рдХреА рдШрдЯрдирд╛ рдХреА рдЖрд╡реГрддреНрддрд┐ рдХреЛ рджрд░реНрд╢рд╛рддреЗ рд╣реБрдП рддрд╛рд░реЛрдВ рдХреЗ рдПрдХ рд╕рд░рдгреА рдореЗрдВ рдмрджрд▓ рджреЗрддреЗ рд╣реИрдВ редрд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ рдмрд╛рд░ sorted (by:)
рдмрд╕ " <
" рдСрдкрд░реЗрдЯрд░ рдХреЛ рдПрдХ рдЙрдЪреНрдЪ-рдХреНрд░рдо рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдзреЗрдп рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред рдлрд╝рдВрдХреНрд╢рди sorted (by:)
рдЗрдирдкреБрдЯ рдкрд░ рдПрдХрдорд╛рддреНрд░ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ "рддреБрд▓рдирд╛ рдлрд╝рдВрдХреНрд╢рди" рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рджреЛ рдЖрд╕рдиреНрди рдореВрд▓реНрдпреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдФрд░ рдпрд╣ рддрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЙрдиреНрд╣реЗрдВ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдЖрджреЗрд╢ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд░рд┐рдЯрд░реНрдиtrue
) рдпрд╛ рдирд╣реАрдВ (рд░рд┐рдЯрд░реНрди false
)ред рд╣рдо рдЗрд╕ "рддреБрд▓рдирд╛рддреНрдордХ рдлрд╝рдВрдХреНрд╢рди" sorted (by:)
рдХреЛ рдПрдХ рдЕрдирд╛рдо рдмрдВрдж рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рджреЗ рд╕рдХрддреЗ рд╣реИрдВ : sorted(by: {$0.key < $1.key}
рдФрд░ рд╣рдо рдЗрд╕реЗ рдХреЗрд╡рд▓ рдСрдкрд░реЗрдЯрд░ " <
" рджреЗ рд╕рдХрддреЗ рд╣реИрдВ , рдЬрд┐рд╕рдХреЗ рдкрд╛рд╕ рд╣рдорд╛рд░реЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдпрд╣ рднреА рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ, рдФрд░ рдХреБрдВрдЬреА рджреНрд╡рд╛рд░рд╛ рдЫрдВрдЯрдиреА рдкреНрд░рдЧрддрд┐ рдкрд░ рд╣реИ key
редрдЕрдЧрд░ рд╣рдо рд╢рдмреНрджрдХреЛрд╢ рдХреЛ рдореВрд▓реНрдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рдХреНрд░рдордмрджреНрдз рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ value
рдФрд░ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ рд╡рд╛рдХреНрдпрд╛рдВрд╢ рдореЗрдВ рдХреМрди рд╕реЗ рдЕрдХреНрд╖рд░ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдкрд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдХреНрд▓реЛрдЬрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ sorted (by:)
: let countsStat = letterCountDictionary .sorted(by: {$0.value > $1.value}) .map{"\($0.0):\($0.1)"} print (countsStat )
рдЕрдЧрд░ рд╣рдо рдПрдХ рдмрд╣реБ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдмрд╣реБ рд╡рд╛рдХреНрдпрд╛рдВрд╢ рдХреЗ рдкрддреНрд░ рд╕реНрдкреЗрдХреНрдЯреНрд░рдо рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рдорд╛рдзрд╛рди рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ ... let multilineString = """ , , ; , тАФ , : тАФ , . , , . . , , ┬л ┬╗ . , , ! """ let words = multilineString.lowercased() .split(separator: "\n") .flatMap{$0.split(separator: " ")} let wordsString = words.reduce ("",+).filter { "" .contains($0)} let letterCount = wordsString.reduce(into: [:]) { counts, letter in counts[letter, default: 0] += 1} let lettersStat = letterCountDictionary .sorted(by: <) .map{"\($0.0):\($0.1)"} print (lettersStat)
... рд╣рдо рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЗрд╕ рдорд╛рд░реНрдЧ рдореЗрдВ рдореМрд▓рд┐рдХ рдХреЛрдб рдореЗрдВ рдХреЛрдИ рднреА рд╡реЗрд░рд┐рдПрдмрд▓ (рдХреЛрдИ var
, рдХреЗрд╡рд▓ let)
рдФрд░ рд╡рд░реНрддрдорд╛рди (рдХреБрдЫ рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдХрд╛рд░реНрдп) рдХреЛ рджрд░реНрд╢рд╛рддреА рд╣реИ, рдХреИрд╕реЗ рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдирд╣реАрдВ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рд╕рднреА рдХреЗ рдирд╛рдо:split
- рд╡рд┐рднрд╛рдЬрди,map
- рдкрд░рд┐рд╡рд░реНрддрд┐рддflatMap
рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рд╡рд░реНрддрд┐рдд - рд╕рдВрд░реЗрдЦрдг, (рдШреЛрдВрд╕рд▓реЗ рдореЗрдВ рд╕реЗ рдПрдХ рд╕реНрддрд░ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рджреНрд╡рд╛рд░рд╛)filter
-, рдлрд┐рд▓реНрдЯрд░sorted
- рдЫрдБрдЯрд╛рдИ,reduce
- рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЖрдкрд░реЗрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбреЗрдЯрд╛ рдЪрд╛рд▓реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПрдХреЛрдб рдХреА рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдХреЗ рдЗрд╕ рдЯреБрдХрдбрд╝рд╛ рдореЗрдВ рд╕рдорд╛рд░реЛрд╣ рд╣реИ рдХрд┐ рд╣рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╣рдо рдореЗрдВ рд╣реИрдВ рдХреЗ рдирд╛рдо рдмрддрд╛рддреЗ рд╣реИрдВред рднрд░рддрд╛ "рд╢реБрджреНрдз" рдкрд░рд┐рд╡рд░реНрддрди рдкреНрд░рдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ map
рдЕрдЧрд░ рд╣рдо рдкреНрд░рджрд░реНрд╢рди рдиреЗрд╕реНрдЯрд┐рдВрдЧ рд╕реНрддрд░ рдХреЗ рд░реВрдкрд╛рдВрддрд░рдг рдкреНрд░рдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИflatMap
, рдЕрдЧрд░ рд╣рдо рдХреЗрд╡рд▓ рдХреБрдЫ рдбреЗрдЯрд╛ рдХрд╛ рдЪрдпрди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ filter
, рдЖрджрд┐ "рдЙрдЪреНрдЪрддрдо рдХреНрд░рдо" рдХреЗ рдЗрди рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ Apple
рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рддреЛ рдХреЛрдб рдХрд╛ рдпрд╣ рдЯреБрдХрдбрд╝рд╛ рдмрд╣реБрдд рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдФрд░ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╣реИ - рд╣рдореЗрдВ рдЕрдкрдиреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 5 рд╕реЗ рдЕрдзрд┐рдХ рд╡рд╛рдХреНрдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рдереАред рдпрд╣ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИредрдЗрд╕ рдбреЗрдореЛ рдореЗрдВ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рджреЛрд╖ рдпрд╣ рд╣реИ рдХрд┐, рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдпрддрд╛, рдкрд░реАрдХреНрд╖рдгрд╢реАрд▓рддрд╛ рдФрд░ рдкрдардиреАрдпрддрд╛ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЕрдкрдиреЗ рдкрд╛рда рдХреЛ рд╡рд┐рднрд┐рдиреНрди рдЙрдЪреНрдЪ-рдХреНрд░рдо рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрд╛рд░-рдмрд╛рд░ рдкреАрдЫрд╛ рдХрд░рддреЗ рд╣реИрдВред рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, Collection
рдкреНрд░рджрд░реНрд╢рди рдЧрд┐рд░ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рд╣рдо рдкрд╣рд▓реЗ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ filter(_:)
рдФрд░, рдФрд░ рдлрд┐рд░ - first
редSwift 4
рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдирдП рдлреАрдЪрд░ рд╡рд┐рдХрд▓реНрдк рдЬреЛрдбрд╝реЗ рдЧрдП рд╣реИрдВ, рдФрд░ рдпрд╣рд╛рдВ рддреЗрдЬ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕реБрдЭрд╛рд╡ рджрд┐рдП рдЧрдП рд╣реИрдВред1. рдЙрдкрдпреЛрдЧ contains
, рдирд╣реАрдВfirst( where: ) != nil
рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдирд╛ рдХрд┐ рдПрдХ рд╡рд╕реНрддреБ рдПрдХ рд╕рдВрдЧреНрд░рд╣ Collection
рдореЗрдВ рд╣реИ, рдХрдИ рддрд░реАрдХреЛрдВ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдкреНрд░рджрд░реНрд╢рди рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ contains
редрд╕рд╣реА рдХреЛрдб let numbers = [0, 1, 2, 3] numbers.contains(1)
рдкреНрд░реЛрддреНрд╕рд╛рд╣рди рдХреЛрдб let numbers = [0, 1, 2, 3] numbers.filter { number in number == 1 }.isEmpty == false numbers.first(where: { number in number == 1 }) != nil
2. рд╕рддреНрдпрд╛рдкрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ isEmpty
, count
рд╢реВрдиреНрдп рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдирд╣реАрдВ
рдЪреВрдВрдХрд┐ рдХреБрдЫ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд▓рд┐рдП рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рд╕рдВрдЧреНрд░рд╣ рдХреЗ count
рд╕рднреА рддрддреНрд╡реЛрдВ рдкрд░ рдкреБрдирд░рд╛рд╡реГрддрд┐ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИредрд╕рд╣реА рдХреЛрдб let numbers = [] numbers.isEmpty
рдкреНрд░реЛрддреНрд╕рд╛рд╣рди рдХреЛрдб let numbers = [] numbers.count == 0
3. рдХреЗ String
рд╕рд╛рде рдЦрд╛рд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВisEmpty
рд╕реНрдЯреНрд░рд┐рдВрдЧ String
рдЗрди Swift
рдХреИрд░реЗрдХреНрдЯрд░реНрд╕ рдХрд╛ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рд╣реИ [Character]
ред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ String
рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ isEmpty
редрд╕рд╣реА рдХреЛрдб myString.isEmpty
рдкреНрд░реЛрддреНрд╕рд╛рд╣рди рдХреЛрдб myString == "" myString.count == 0
4. рдкрд╣рд▓реЗ рддрддреНрд╡ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЬреЛ рдХреБрдЫ рд╢рд░реНрддреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИ
рд╕рдВрдкреВрд░реНрдг рд╕рдВрдЧреНрд░рд╣ рдкрд░ Iterating рдкрд╣рд▓реА рд╡рд╕реНрддреБ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛ рдХреБрдЫ рд╢рд░реНрддреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рддреА рд╣реИ, рдПрдХ рд╡рд┐рдзрд┐ рдХреЗ filter
рдмрд╛рдж рдПрдХ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ first
, рд▓реЗрдХрд┐рди рдЧрддрд┐ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╡рд┐рдзрд┐ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рд╣реИ first (where:)
ред рдЬреИрд╕реЗ рд╣реА рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╕реНрдерд┐рддрд┐ рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рд╡рд┐рдзрд┐ рд╕рдВрдЧреНрд░рд╣ рдкрд░ рдкреБрдирд░рд╛рд╡реГрддрд┐ рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджреЗрддреА рд╣реИред рд╡рд┐рдзрд┐ filter
рдкреВрд░реЗ рд╕рдВрдЧреНрд░рд╣ рдкрд░ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдЧреА, рдЪрд╛рд╣реЗ рд╡рд╣ рдЖрд╡рд╢реНрдпрдХ рддрддреНрд╡реЛрдВ рд╕реЗ рдорд┐рд▓реЗ рдпрд╛ рдирд╣реАрдВредрдЬрд╛рд╣рд┐рд░ рд╣реИ, рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рднреА рдпрд╣реА рд╕рдЪ рд╣реИ last (where:)
редрд╕рд╣реА рдХреЛрдб let numbers = [3, 7, 4, -2, 9, -6, 10, 1] let firstNegative = numbers.first(where: { $0 < 0 })
рдкреНрд░реЛрддреНрд╕рд╛рд╣рди рдХреЛрдб let numbers = [0, 2, 4, 6] let allEven = numbers.filter { $0 % 2 != 0 }.isEmpty
рдХрднреА-рдХрднреА, рдЬрдм рд╕рдВрдЧреНрд░рд╣ Collection
рдмрд╣реБрдд рдмрдбрд╝рд╛ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдкреНрд░рджрд░реНрд╢рди рдЖрдкрдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЕрдирд┐рд╡рд╛рд░реНрдп рдФрд░ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдФрд░ рдЖрдкрдХреЛ рдкрд╕рдВрдж рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЛ рдЪреБрдирдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рдкрд╕ рд▓реМрдЯрдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИредTASK 2
рдПрдХ рдЙрдЪреНрдЪ рдХреНрд░рдо рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрд╣реБрдд рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдЙрдкрдпреЛрдЧ рдХрд╛ рдПрдХ рдФрд░ рд╢рд╛рдирджрд╛рд░ рдЙрджрд╛рд╣рд░рдг рд╣реИ reduce (_:, _:)
рдЬреЛ рдореИрдВ рднрд░ рдореЗрдВ рдЖрдпрд╛ рд╣реВрдВред рдпрд╣ рдПрдХ SET рдЧреЗрдо рд╣реИ редрдпрд╣рд╛рдБ рдЗрд╕рдХреЗ рдореВрд▓ рдирд┐рдпрдо рд╣реИрдВред рдЦреЗрд▓ рдХрд╛ рдирд╛рдо SET
рдЕрдВрдЧреНрд░реЗрдЬреА рд╢рдмреНрдж "рд╕реЗрдЯ" - "рд╕реЗрдЯ" рд╕реЗ рдЖрддрд╛ рд╣реИред рдЧреЗрдо SET
рдореЗрдВ 81 рдХрд╛рд░реНрдб рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдкреНрд░рддреНрдпреЗрдХ рдореЗрдВ рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рдЪрд┐рддреНрд░ рд╣реИ:
рдкреНрд░рддреНрдпреЗрдХ рдХрд╛рд░реНрдб рдореЗрдВ 4 рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рд╣реИрдВ, рдЬреЛ рдиреАрдЪреЗ рд╕реВрдЪреАрдмрджреНрдз рд╣реИрдВ:рдорд╛рддреНрд░рд╛ : рдкреНрд░рддреНрдпреЗрдХ рдХрд╛рд░реНрдб рдореЗрдВ рдПрдХ, рджреЛ рдпрд╛ рддреАрди рд╡рд░реНрдг рд╣реИрдВредрдкрд╛рддреНрд░реЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд░ : рдЕрдВрдбрд╛рдХрд╛рд░, рд░рдВрдмрд▓ рдпрд╛ рддрд░рдВрдЧреЗрдВредрд░рдВрдЧ : рдкреНрд░рддреАрдХ рд▓рд╛рд▓, рд╣рд░реЗ рдпрд╛ рдмреИрдВрдЧрдиреА рд░рдВрдЧ рдХреЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВредрднрд░рдирд╛ : рдкрд╛рддреНрд░ рдЦрд╛рд▓реА, рдЫрд╛рдпрд╛рдВрдХрд┐рдд рдпрд╛ рдЫрд╛рдпрд╛рдВрдХрд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВредрдЦреЗрд▓ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдпSET
: рдЯреЗрдмрд▓ рдкрд░ рд░рдЦреЗ рдЧрдП 12 рдХрд╛рд░реНрдбреЛрдВ рдореЗрдВ рд╕реЗ, рдЖрдкрдХреЛ SET
3 рдХрд╛рд░реНрдбреЛрдВ рд╕реЗ рдорд┐рд▓рдХрд░ (рдПрдХ рд╕реЗрдЯ) рдвреВрдВрдврдирд╛ рд╣реЛрдЧрд╛ , рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдЪрд┐рдиреНрд╣ рдпрд╛ рддреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реЛ рдпрд╛ рд╕рднреА 3 рдХрд╛рд░реНрдбреЛрдВ рдкрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рд╣реЛред рд╕рднреА рд╕рдВрдХреЗрддреЛрдВ рдХреЛ рдЗрд╕ рдирд┐рдпрдо рдХрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд╛рд▓рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПредрдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рднреА 3 рдХрд╛рд░реНрдб рдкрд░ рдкрд╛рддреНрд░реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рд╕рднреА 3 рдХрд╛рд░реНрдб рдкрд░ рдПрдХ рд╣реА рдпрд╛ рдЕрд▓рдЧ рд░рдВрдЧ рдпрд╛ рддреЛ рдПрдХ рд╣реА рдпрд╛ рдЕрд▓рдЧ, рдФрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЗрддрдиреЗ рдкрд░ ...рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рдХрд╛рд░реНрдб рдореЙрдбрд▓ рдореЗрдВ рдХреЗрд╡рд▓ рд░реБрдЪрд┐ рдХрд░ рд░рд╣реЗ рд╣реИрдВ SET
struct SetCard
рдФрд░ рдХрд▓рди рд╡рд┐рдзрд┐ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ SET
рдХреЗ рд▓рд┐рдП 3 рдирдХреНрд╢реЗ isSet( cards:[SetCard])
: struct SetCard: Equatable { let number: Variant
рдореЙрдбрд▓ рдкреНрд░рддреНрдпреЗрдХ рд╕реБрд╡рд┐рдзрд╛ - рд╕рдВрдЦреНрдпрд╛ number
, рдкреНрд░рддреАрдХ рдкреНрд░рдХрд╛рд░ shape
, рд░рдВрдЧ color
рдФрд░ рднрд░рдиреЗ fill
- рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ рдкреНрд░рд╕реНрддреБрдд Variant
рддреАрди рд╕рдВрднрд╛рд╡рд┐рдд рдорд╛рди рд╣реЛрдиреЗ var1
, var2
рдФрд░ var3
3 рдкреВрд░реНрдгрд╛рдВрдХ рдХреЗ рд▓рд┐рдП рдЬреЛ рдореЗрд▓ рдЦрд╛рддреА рд╣реИ rawValue
- 1,2,3
ред рдЗрд╕ рд░реВрдк рдореЗрдВ, rawValue
рдЗрд╕реЗ рд╕рдВрдЪрд╛рд▓рд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред рдпрджрд┐ рд╣рдо рдХреБрдЫ рд╕рдВрдХреЗрдд рд▓реЗрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, color
рддреЛ 3 рдХрд╛рд░реНрдб рдХреЗ rawValue
рд▓рд┐рдП рд╕рдм рдХреБрдЫ рдЬреЛрдбрд╝рдХрд░ colors
, рд╣рдо рдкрд╛рдПрдВрдЧреЗ рдХрд┐ рдпрджрд┐ colors
рд╕рднреА 3 рдХрд╛рд░реНрдб рд╕рдорд╛рди рд╣реИрдВ, рддреЛ рдпреЛрдЧ рд╕рдорд╛рди рд╣реЛрдЧрд╛ 3
, 6
рдпрд╛ 9
, рдпрджрд┐ рд╡реЗ рд╕рднреА рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реЛрдВрдЧреЗ, рддреЛ рдпреЛрдЧ рд╣реЛрдЧрд╛ рдмрд░рд╛рдмрд░ 6
ред рдЗрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рддреАрд╕рд░реА рд░рд╛рд╢рд┐ рдХреЗ rawValue
рд▓рд┐рдП рдЧреБрдгрд╛ рд╣реИcolors
рд╕рднреА 3 рдХрд╛рд░реНрдбред рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ 3 рдХрд╛рд░реНрдб рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╢рд░реНрдд рд╣реИ SET
ред 3 рдХрд╛рд░реНрдб рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ SET
рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рднреА рд╕рдВрдХреЗрддреЛрдВ рдХреЗ рд▓рд┐рдП SetCard
- рдорд╛рддреНрд░рд╛ number
, рдкреНрд░рддреАрдХ рдкреНрд░рдХрд╛рд░ shape
, рд░рдВрдЧ color
рдФрд░ рднрд░рдирд╛ fill
- рдЙрдирдХреА рд░рд╛рд╢рд┐ rawValue
3 рдХреА рдмрд╣реБ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП редрдЗрд╕рд▓рд┐рдП, рдореЗрдВ static
рд╡рд┐рдзрд┐, isSet( cards:[SetCard])
рд╣рдо рдкрд╣рд▓реА рд╕рд░рдгреА рдЧрдгрдирд╛ sums
рд░рдХрдо рдХреЗ rawValue
рд╕рднреА 4 рдкреНрд░рджрд░реНрд╢рди рдирдХреНрд╢рд╛ рдЙрдЪреНрдЪ рдЖрджреЗрд╢ рд╕рдорд╛рд░реЛрд╣ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдХреЗ рд▓рд┐рдП рд╕рднреА 3 рдирдХреНрд╢реЗ рдХреЗ рд▓рд┐рдП reduce
рдПрдХ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд░рд╛рдмрд░ 0
рд╣реИ, рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдЬрдорд╛ {$0 + $1.number.rawValue}
, {$0 + $1.color.rawValue}
, {$0 + $1.shape.rawValue}
, { {$0 + $1.fill.rawValue}
ред рд╕рд░рдгреА рдХрд╛ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ sums
3 рдХрд╛ рдПрдХ рдмрд╣реБ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдлрд┐рд░ рд╕реЗ рд╣рдо рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВreduce
, рд▓реЗрдХрд┐рди рдЗрд╕ рдмрд╛рд░ true
рддрд╛рд░реНрдХрд┐рдХ рдлрд╝рдВрдХреНрд╢рди " AND
" рдХреЗ рд╕рдорд╛рди рдФрд░ рд╕рдВрдЪрдп рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдореВрд▓реНрдп {$0 && ($1 % 3) == 0}
ред рд╕реНрд╡рд┐рдлреНрдЯ 5 рдЕрд▓рдЧ рд╕рдорд╛рд░реЛрд╣ рдХреА рдмрд╣реБрд▓рддрд╛ рдХреА рдЬрд╛рдБрдЪ рдХреЗ рд▓рд┐рдП рд╢реБрд░реВ рдХреА isMultiply(of:)
рдСрдкрд░реЗрдЯрд░ рдХреЗ рдмрдЬрд╛рдп %
рд╡рд┐рднрд╛рдЬрди рдХреЗ рд╢реЗрд╖ред рдпрд╣ рднреА рдХреЛрдб рдХреА рдкрдардиреАрдпрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рд╣реЛрдЧрд╛: { $0 && ($1.isMultiply(of:3) }
редрдпрд╣ рдХрд▓реНрдкрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреЛрдб 3 SetCard
рдХрд╛рд░реНрдб рд╣реИрдВ, рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдХреЛрдб SET
" рдХрд╛рд░реНрдпрд╛рддреНрдордХ " рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ , рдФрд░ рд╣рдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ Playground
:
рдЗрд╕ рдЧреЗрдо рдореЙрдбрд▓ рдкрд░ SET
рдпреВрдЬрд░ рдЗрдВрдЯрд░рдлреЗрд╕ ( UI
) рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХреИрд╕реЗ рдХрд░реЗрдВ рдпрд╣рд╛рдВ , рдпрд╣рд╛рдВ рдФрд░ рдпрд╣рд╛рдВ редрд╢реБрджреНрдз рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдФрд░ рджреБрд╖реНрдкреНрд░рднрд╛рд╡
рдПрдХ рд╢реБрджреНрдз рдХрд╛рд░реНрдп рджреЛ рд╢рд░реНрддреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╣рдореЗрд╢рд╛ рд╕рдорд╛рди рдЗрдирдкреБрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИред рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреА рдЧрдгрдирд╛ рдХреЗ рдмрд╛рд╣рд░ рдбреЗрдЯрд╛ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдбрд┐рд╕реНрдХ рдкрд░) рдпрд╛ рдмрд╛рд╣рд░ рд╕реЗ рд╕реНрд░реЛрдд рдбреЗрдЯрд╛ рдХреЗ рдЙрдзрд╛рд░ рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝реЗ рджреБрд╖реНрдкреНрд░рднрд╛рд╡ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рдордп)ред рдпрд╣ рдЖрдкрдХреЛ рдХреЛрдб рдХреЛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИредрдХреЗ рд▓рд┐рдП рдЗрд╕ рд╡рд┐рд╖рдп Swift
рд╕рд╛рдЗрдЯ рдкрд░ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдкреВрд░реА рддрд░рд╣ рд╕реЗ point.free рдХреЗ рдкрд╣рд▓реЗ рдПрдкрд┐рд╕реЛрдб рдореЗрдВ " рдХрд╛рд░реНрдп " рдФрд░ " рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯреНрд╕ " рд╣реИ, рдЬреЛ рдореЗрдВ рд░реВрд╕реА рдЕрдиреБрд╡рд╛рдж рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд " рд╡рд┐рдХрд▓реНрдк " рдФрд░ "рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯреНрд╕" редрд╕рдорд╛рд░реЛрд╣ рд░рдЪрдирд╛
рдЧрдгрд┐рддреАрдп рдЕрд░реНрде рдореЗрдВ, рдЗрд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рджреВрд╕рд░реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкрд░рд┐рдгрд╛рдо рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдирд╛ред рдПрдХ Swift
рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ, рд╡реЗ рдПрдХ рдорд╛рди рд▓реМрдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рдЖрдк рджреВрд╕рд░реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЕрднреНрдпрд╛рд╕ рд╣реИредрдХрд▓реНрдкрдирд╛ рдХреАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ рд╣реИ рдФрд░ рд╣рдо рдЖрдЙрдЯрдкреБрдЯ рдкрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдо рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рдПрдХ рд╡рд░реНрдЧ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЖрдорддреМрд░ рдкрд░ рд╣рдо рдЗрд╕реЗ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдлрд┐рд░ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ: var integerArray = [1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 4, 5] func unique(_ array: [Int]) -> [Int] { return array.reduce(into: [], { (results, element) in if !results.contains(element) { results.append(element) } }) } func even(_ array: [Int]) -> [Int] { return array.filter{ $0%2 == 0} } func square(_ array: [Int]) -> [Int] { return array.map{ $0*$0 } } var array = square(even(unique(integerArray)))
рдпрд╣ рдХреЛрдб рд╣рдореЗрдВ рд╕рд╣реА рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХреЛрдб рдХреА рдЕрдВрддрд┐рдо рдкрдВрдХреНрддрд┐ рдХреА рдкрдардиреАрдпрддрд╛ рдЗрддрдиреА рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИред рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдХреНрд░рдо (рджрд╛рдПрдВ рд╕реЗ рдмрд╛рдПрдВ) рдЙрд╕ рдХреЗ рд╡рд┐рдкрд░реАрдд рд╣реИ рдЬрд┐рд╕рдХреЗ рд╣рдо рдЖрджреА рд╣реИрдВ (рдмрд╛рдПрдВ рд╕реЗ рджрд╛рдПрдВ) рдФрд░ рдпрд╣рд╛рдВ рджреЗрдЦрдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗред рд╣рдореЗрдВ рдЕрдкрдиреЗ рддрд░реНрдХ рдХреЛ рдкрд╣рд▓реЗ рдХрдИ рдПрдореНрдмреЗрдбрд┐рдВрдЧ рдХреЗ рдЕрдВрддрд░рддрдо рднрд╛рдЧ рддрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рдПрдХ рд╕рд░рдгреА рдХреЗ рд▓рд┐рдП inegerArray
, рдлрд┐рд░ рдЗрд╕ рд╕рд░рдгреА рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдмрд╛рд╣рд░реА рдХреЗ рд▓рд┐рдП unique
, рдлрд┐рд░ рд╣рдо рдПрдХ рдФрд░ рд╕реНрддрд░ рддрдХ рдЬрд╛рддреЗ рд╣реИрдВ - рдПрдХ рдлрд╝рдВрдХреНрд╢рди even
, рдФрд░ рдЕрдВрдд рдореЗрдВ, рдПрдХ рдлрд╝рдВрдХреНрд╢рди square
редрдФрд░ рдпрд╣рд╛рдВ рдлрд╝рдВрдХреНрд╢рдВрд╕ >>>
рдФрд░ рдСрдкрд░реЗрдЯрд░реНрд╕ рдХреА "рд░рдЪрдирд╛" рд╣рдорд╛рд░реА рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд▓рд┐рдП рдЖрддреА рд╣реИ |>
, рдЬреЛ рд╣рдореЗрдВ integerArray
рдлрд╝рдВрдХреНрд╢рди рдХреЗ "рдХрдиреНрд╡реЗрдпрд░" рдХреЗ рд░реВрдк рдореЗрдВ рдореВрд▓ рд╕рд░рдгреА рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреЗ рд╣реБрдП, рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрд░реАрдХреЗ рд╕реЗ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ : var array1 = integerArray |> unique >>> even >>> square
рд▓рдЧрднрдЧ рд╕рднреА рддрд░рд╣ рдХреЗ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рднрд╛рд╖рд╛рдУрдВ рд╡рд┐рд╢реЗрд╖ F#
, Elixir
рдФрд░ Elm
"рд░рдЪрдирд╛" рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрди рдСрдкрд░реЗрдЯрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВредрдХреЗ рд░реВрдк рдореЗрдВ Swift
рд╡рд╣рд╛рдБ рдХреЛрдИ рдСрдкрд░реЗрдЯрд░реЛрдВ 'рд░рдЪрдирд╛ "рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ >>>
рдФрд░ |>
, рд▓реЗрдХрд┐рди рд╣рдо рдорджрдж рд╕реЗ рдмрд╣реБрдд рдЖрд╕рд╛рдиреА рд╕реЗ рдЙрдиреНрд╣реЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ Generics
, рд╕рд░реНрдХрд┐рдЯ ( closure
) рдФрд░ infix
рдСрдкрд░реЗрдЯрд░: precedencegroup ForwardComposition{ associativity: left higherThan: ForwardApplication } infix operator >>> : ForwardComposition func >>> <A, B, C>(left: @escaping (A) -> B, right: @escaping (B) -> C) -> (A) -> C { return { right(left($0)) } } precedencegroup ForwardApplication { associativity: left } infix operator |> : ForwardApplication func |> <A, B>(a: A, f: (A) -> B) -> B { return f(a) }
рдЕрддрд┐рд░рд┐рдХреНрдд рд▓рд╛рдЧрддреЛрдВ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдпрд╣ рдЖрдкрдХреЗ рдХреЛрдб рдХреЗ рдкреНрд░рджрд░реНрд╢рди, рдкрдардиреАрдпрддрд╛ рдФрд░ рдкрд░реАрдХреНрд╖рдгрд╢реАрд▓рддрд╛ рдХреЛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рдмрдврд╝рд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм map
рдЖрдк рдЕрдВрджрд░ рдХрдИ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ >>>
рдорд╛рдзреНрдпрдо рд╕реЗ "рдХрдВрдкреЛрдЬрд╝рд┐рд╢рди" рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдПрдХ рдкреВрд░реА рд╢реНрд░реГрдВрдЦрд▓рд╛ рд░рдЦрддреЗ рд╣реИрдВ , рддреЛ рдПрдХ рд╕рд░рдгреА рдХрд╛ рдкреАрдЫрд╛ рдХрд░рддреЗ рд╣реБрдП map
: var integerArray1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 4, 5] let b = integerArray1.map( { $0 + 1 } >>> { $0 * 3 } >>> String.init) print (b)
рд▓реЗрдХрд┐рди рд╣рдореЗрд╢рд╛ рдПрдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕рдХрд╛рд░рд╛рддреНрдордХ рдкреНрд░рднрд╛рд╡ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИредрдкрд╣рд▓реА рдмрд╛рд░, рдЬрдм рдпрд╣ Swift
2014 рдореЗрдВ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ , рддреЛ рд╕рднреА рдиреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреА "рд░рдЪрдирд╛" рдХреЗ рд▓рд┐рдП рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рд╕рд╛рде рдкреБрд╕реНрддрдХрд╛рд▓рдп рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рднрд╛рдЧ рд▓рд┐рдпрд╛ рдФрд░ рдЙрд╕ рд╕рдордп рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдард┐рди рдХрд╛рд░реНрдп рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛ рдЬреИрд╕реЗ рдХрд┐ JSON
рдЕрд╕реАрдо рдиреЗрд╕реНрдЯреЗрдб рдирд┐рд░реНрдорд╛рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ if let
ред рдореИрдВрдиреЗ рдЦреБрдж рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓реЗрдЦ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ JSON рд╣реИ рдЬреЛ рдореБрдЭреЗ рдЗрд╕рдХреЗ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рд╕рдорд╛рдзрд╛рди рд╕реЗ рдкреНрд░рд╕рдиреНрди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЕрд░реНрдЧреЛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдкреНрд░рд╢рдВрд╕рдХ рдерд╛ редрд▓реЗрдХрд┐рди рдбреЗрд╡рд▓рдкрд░реНрд╕ Swift
рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рдЧрдП рдФрд░ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛, рдкреНрд░реЛрдЯреЛрдХреЙрд▓-рдЙрдиреНрдореБрдЦ рддрдХрдиреАрдХ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХрд╛ рдПрдХ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рддрд░реАрдХрд╛ред JSON
рдбреЗрдЯрд╛ рдХреЛ рд╕реАрдзреЗ "рдбрд┐рд▓реАрд╡рд░" рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
рдпрд╣ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд
Codable
рдЬреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рдЕрдкрдиреЗ рдореЙрдбрд▓ рдореЗрдВ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХреЗ рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ Swift
: рдбрд╛рдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ String
, Int
, URL
, Array
, Dictionary
, рдЖрджрд┐ struct Blog: Codable { let id: Int let name: String let url: URL }
JSON
рдЙрд╕ рдкреНрд░рд╕рд┐рджреНрдз рд▓реЗрдЦ рдХреЗ рдбреЗрдЯрд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж ... [ { "id" : 73, "name" : "Bloxus test", "url" : "http://remote.bloxus.com/" }, { "id" : 74, "name" : "Manila Test", "url" : "http://flickrtest1.userland.com/" } ]
... рдлрд┐рд▓рд╣рд╛рд▓ рдЖрдкрдХреЛ рдмреНрд▓реЙрдЧ рдХреА рдПрдХ рд╕рд░рдгреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреА рдПрдХ рдкрдВрдХреНрддрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ blogs
: let blogs = Bundle.main.path(forResource: "blogs", ofType: "json") .map(URL.init(fileURLWithPath:)) .flatMap { try? Data.init(contentsOf: $0) } .flatMap { try? JSONDecoder().decode([Blog].self, from: $0) } print ("\(blogs!)")
рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП "рд░рдЪрдирд╛" рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рд░ рдХреЛрдИ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рднреВрд▓ рдЧрдпрд╛ рд╣реИ JSON
, рдЕрдЧрд░ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдЕрдзрд┐рдХ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рдФрд░ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реИредрдпрджрд┐ рд╕рдм рдХреБрдЫ рдЗрддрдирд╛ рдЖрд╕рд╛рди рд╣реИ, рддреЛ рд╣рдо JSON
рдбреЗрдЯрд╛ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдореЙрдбрд▓ рдореЗрдВ "рдЕрдкрд▓реЛрдб" рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ JSON
рдбреЗрдЯрд╛ рдлрд╝рд╛рдЗрд▓ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдирд╛рдо рд╣реИ user.json
рдФрд░ рд╣рдорд╛рд░реА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ Resources.
ред рдЗрд╕рдореЗрдВ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдбреЗрдЯрд╛ рд╣реИ: { "email": "blob@pointfree.co", "id": 42, "name": "Blob" }
рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдбреЗрдЯрд╛ рд╕реЗ рдЗрдирд┐рд╢рд▓рд╛рдЗрдЬрд╝рд░ рд╡рд╛рд▓рд╛ Codable
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣реИ :User
json
struct User: Codable { let email: String let id: Int let name: String init?(json: Data) { if let newValue = try? JSONDecoder().decode(User.self, from: json) { self = newValue } else { return nil } } }
рд╣рдо рдмрд╣реБрдд рд╣реА newUser
рд╕рд░рд▓ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдХреЛрдб рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЖрд╕рд╛рдиреА рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ : let newUser = Bundle.main.path(forResource: "user", ofType: "json") .map(URL.init(fileURLWithPath:)) .flatMap { try? Data.init(contentsOf: $0) } .flatMap { User.init(json: $0) }
рдЬрд╛рд╣рд┐рд░ рд╣реИ, newUser
рдПрдХ TYPE рд╣реЛрдЧрд╛ Optional
, рдЕрд░реНрдерд╛рддреН User?
:
рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░реА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ Resources
рдПрдХ рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рдФрд░ рдлрд╝рд╛рдЗрд▓ рд╣реИ invoices.json
рдФрд░ рдЗрд╕рдореЗрдВ рдЗрд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЪрд╛рд▓рд╛рди рдкрд░ рдбреЗрдЯрд╛ рд╣реИред [ { "amountPaid": 1000, "amountDue": 0, "closed": true, "id": 1 }, { "amountPaid": 500, "amountDue": 500, "closed": false, "id": 2 } ]
рд╣рдо рдЗрд╕ рдбреЗрдЯрд╛ рдХреЛ рдареАрдХ рдЙрд╕реА рддрд░рд╣ рд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рд╣рдордиреЗ рдХрд┐рдпрд╛ рдерд╛ User
ред рдЖрдЗрдП рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдЪрд╛рд▓рд╛рди рдореЙрдбрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ struct Invoice
... struct Invoice: Codable { let amountDue: Int let amountPaid: Int let closed: Bool let id: Int }
... рдФрд░ рдКрдкрд░ рдкреНрд░рд╕реНрддреБрдд JSON
рдЪрд╛рд▓рд╛рдиреЛрдВ рдХреА рд╕рд░рдгреА рдХреЛ рдбреАрдХреЛрдб рдХрд░реЗрдВ invoices
, рдХреЗрд╡рд▓ рдлрд╝рд╛рдЗрд▓ рдкрде рдХреЛ рдмрджрд▓рддреЗ рд╣реБрдП рдФрд░ рддрд░реНрдХ рдХреЛ рдбрд┐рдХреЛрдб рдХрд░реЗрдВ decode
: let invoices = Bundle.main.path(forResource: "invoices", ofType: "json") .map( URL.init(fileURLWithPath:) ) .flatMap { try? Data.init(contentsOf: $0) } .flatMap { try? JSONDecoder().decode([Invoice].self, from: $0) }
invoices
рд╣реЛрдЧрд╛ [Invoice]?
:
рдЕрдм рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ user
рдХреЛ рдЙрд╕рдХреЗ рдЪрд╛рд▓рд╛рди рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ invoices
, рдпрджрд┐ рд╡реЗ рд╕рдорд╛рди рдирд╣реАрдВ рд╣реИрдВ nil
, рдФрд░ рд╕рд╣реЗрдЬрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд▓рд┐рдлрд╛рдлреЗ рдХреА рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ, UserEnvelope
рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЙрд╕рдХреЗ рдЪрд╛рд▓рд╛рди рдХреЗ рд╕рд╛рде рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ: struct UserEnvelope { let user: User let invoices: [Invoice] }
рджреЛ рдмрд╛рд░ рдкреНрд░рджрд░реНрд╢рди рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп if let
... if let newUser = newUser, let invoices = invoices { }
... рдЪрд▓реЛ if let
рдПрдХ рд╕рд╣рд╛рдпрдХ Generic
рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдбрдмрд▓ рдХреЗ рдПрдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдПрдирд╛рд▓реЙрдЧ рдХреЛ рд▓рд┐рдЦрддреЗ рд╣реИрдВ zip
рдЬреЛ рджреЛ Optional
рдореВрд▓реНрдпреЛрдВ рдХреЛ рдПрдХ Optional
рдЯреБрдкрд▓ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИ : func zip<A, B>(_ a: A?, _ b: B?) -> (A, B)? { if let a = a, let b = b { return (a, b) } return nil }
рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЪрд░ рдХреЛ рдХреБрдЫ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИ newUser
рдФрд░ invoices
, рд╣рдо рдмрд╕ рдЕрдкрдиреЗ рдирдП рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд╕рдм рдХреБрдЫ рдмрдирд╛рддреЗ zip
рд╣реИрдВ, рдЗрдирд┐рд╢рд▓рд╛рдЗрдЬрд╝рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ UserEnvelope.init
рдФрд░ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░реЗрдЧрд╛! let userEnv = zip( Bundle.main.path(forResource: "user", ofType: "json") .map(URL.init(fileURLWithPath:)) .flatMap { try? Data.init(contentsOf: $0) } .flatMap { User.init(json: $0) }, Bundle.main.path(forResource: "invoices", ofType: "json") .map(URL.init(fileURLWithPath:)) .flatMap { try? Data.init(contentsOf: $0) } .flatMap { try? JSONDecoder().decode([Invoice].self, from: $0) } ).flatMap (UserEnvelope.init) print ("\(userEnv!)")
рдПрдХ рдПрдХрд▓ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореЗрдВ, рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд░реВрдк рдореЗрдВ JSON
рдПрдХ рдЬрдЯрд┐рд▓ рдПрдХ рдХреЛ рдбреЗрдЯрд╛ рдкрд╣реБрдВрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдкреВрд░реНрдг рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдкреИрдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ред
struct UserEnvelope
zip
, , . user
, JSON
, invoices
, JSON
. .map
, , ┬л┬╗ .flatMap
, , , .
рдбреЗрдЯрд╛ рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдбреЛрдореЗрди-рд╡рд┐рд╢рд┐рд╖реНрдЯ рднрд╛рд╖рд╛ (DSL) рдХрд╛ рд╕рдВрдЪрд╛рд▓рди zip
, рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ map
рдФрд░ flatMap
рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИ редрд╣рдо рдЗрд╕ рдбреЗрдореЛ рдХреЛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рдЖрдк рдкреЙрдЗрдВрдЯрдлреНрд░реА ..co рдкрд░ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ редрдореИрдВ рд╣рд░ рдЬрдЧрд╣ рдФрд░ рд╣рд░ рдЬрдЧрд╣ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд╛ рдХрдЯреНрдЯрд░ рдкреНрд░рд╢рдВрд╕рдХ рдирд╣реАрдВ рд╣реВрдВ , рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдЙрджрд╛рд░рд╡рд╛рджреА рдЙрдкрдпреЛрдЧ рдореБрдЭреЗ рдЙрдЪрд┐рдд рд▓рдЧрддрд╛ рд╣реИредрдирд┐рд╖реНрдХрд░реНрд╖
рдореИрдВ рд╡рд┐рднрд┐рдиреНрди рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рд╕реБрд╡рд┐рдзрд╛рдУрдВ рджрд┐рдпрд╛ Swf
, рдмреЙрдХреНрд╕ "рдХреА рдЯреА┬л рдмрд╛рд╣рд░ рдЙрдЪреНрдЪ рдХреНрд░рдо рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдкрд░ рдЖрдзрд╛рд░рд┐рдд map
, flatMap
, reduce
, filter
рдФрд░ рджреГрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп Sequence
, Optional
рдФрд░ Result
ред рд╡реЗ рдХреЛрдб рдмрдирд╛рдиреЗ рдХреЗ "рд╡рд░реНрдХрд╣реЙрд░реНрд╕" рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, ,
рдЦрд╛рд╕рдХрд░ рдЕрдЧрд░ рдореВрд▓реНрдп
- рд╕рдВрд░рдЪрдирд╛рдПрдВ struct
рдФрд░ рдЧрдгрдирд╛рдПрдВ рд╡рд╣рд╛рдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ enum
ред рдПрдХ iOS
рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдЗрд╕ рдЯреВрд▓ рдХрд╛ рдорд╛рд▓рд┐рдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПредрдкрд░ рдПрдХрддреНрд░ рдХреА рдЧрдИ рд╕рднреА рдХрд╝реМрдо Playground
, рдкрд░ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ Github ред рдпрджрд┐ рдЖрдкрдХреЛ рд▓реЙрдиреНрдЪ рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рд╣реИ Playground
, рддреЛ рдЖрдк рдЗрд╕ рд▓реЗрдЦ рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:"рд▓реЙрдиреНрдЪрд┐рдВрдЧ рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░" рдФрд░ "рд░рдирд┐рдВрдЧ рдкреНрд▓реЗрдЧреНрд░рд╛рдЙрдВрдб" рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХреНрд╕рдХреЛрдб рдкреНрд▓реЗрдЧреНрд░рд╛рдЙрдВрдб "рдлреНрд░реАрдЬ" рддреНрд░реБрдЯрд┐рдпреЛрдВ рд╕реЗ рдХреИрд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдПрдВредрд╕рдВрджрд░реНрдн:
Functional Programming in Swift: An Introduction.An Introduction to Functional Programming in Swift.The Many Faces of Flat-Map: Part 3Inside the Standard Library: Sequence.map()Practical functional programming in Swift