рд╣рд╛рдп, рдореЗрд░рд╛ рдирд╛рдо рдЗрд▓рд┐рдпрд╛ рд╣реИред рдореИрдВ Tinkoff.ru рдкрд░ рдПрдХ iOS рдбреЗрд╡рд▓рдкрд░ рд╣реВрдВред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рд╕реНрд╡рд┐рдлреНрдЯ 5 рдореЗрдВ рдореБрдЦреНрдп рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХрд╛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╡рд┐рд╡рд░рдг рджреВрдВрдЧрд╛ред рдпреЗ рдкрд░рд┐рд╡рд░реНрддрди
рд░рд┐рд▓реАрдЬрд╝ рдиреЛрдЯреЛрдВ рдореЗрдВ рд╡рд░реНрдгрд┐рдд
рд╣реИрдВ ред рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдЕрднреА рддрдХ рдЦреБрдж рдХреЛ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рдмрд┐рд▓реНрд▓реА рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ!

рдЖрд╡реЗрджрди рдХрд╛ рдЖрдХрд╛рд░ рдШрдЯ рдЬрд╛рдПрдЧрд╛!
рд╕реНрд╡рд┐рдлреНрдЯ 5 рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдФрд░ iOS 12.2 рдХреЗ рд▓рд┐рдП рд╕рдВрдХрд▓рд┐рдд, watchOS 5.2, tvOS 12.2 рд╕реНрд╡рд┐рдлреНрдЯ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдФрд░ рд╕реНрд╡рд┐рдлреНрдЯ рдПрд╕рдбреАрдХреЗ рдХреЗ рд▓рд┐рдП рдЧрддрд┐рд╢реАрд▓ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдФрд░ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрд╡реЗрджрди рдХрд╛ рдЖрдХрд╛рд░ рдХрдо рд╣реЛ рдЬрд╛рдПрдЧрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдмрд╣реБрдд рд╕реЗ рдирд╣реАрдВред рдпрджрд┐ рдЖрдк
рдЗрд╕ рдЯреНрд╡реАрдЯ рдкрд░ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЦрд╛рд▓реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдЖрдХрд╛рд░ 2.4 рдПрдордмреА рд╕реЗ рдШрдЯрд╛рдХрд░ 24 Kb рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ред рдЫреЛрдЯреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рдкрд░рд┐рдгрд╛рдо, рд▓реЗрдХрд┐рди рдмрдбрд╝реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдВрддрд░ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред
@dynamicCallable ( SE-0216 )
@DynamicCallable рд╡рд┐рд╢реЗрд╖рддрд╛
рдЖрдкрдХреЛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рдРрд╕реА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд╡рд╕реНрддреБрдПрдВ рдпрд╛ рдлрдВрдХреНрд╢рдирд▓рд░реНрд╕ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг
рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛
рд╣реИ )ред рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд╡рд╕реНрддреБрдПрдВ C ++, рдкрд╛рдпрдерди, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рд╣реИрдВ, рдФрд░ рд╕реНрд╡рд┐рдлреНрдЯ рдореЗрдВ рдЗрди рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрддрддрд╛ рдХреЗ рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рд╕реНрд╡рд┐рдлреНрдЯ рдЕрдм рдПрдкреАрдЖрдИ рд╕реА рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯрд┐рд╡-рд╕реА рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдмрд╛рддрдЪреАрдд рдХрд░рддреА рд╣реИ, рдФрд░ рднрд╛рд╖рд╛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЧрддрд┐рд╢реАрд▓ рднрд╛рд╖рд╛рдУрдВ - рдкрд╛рдпрдерди, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ, рд░реВрдмреА, рдФрд░ рдЕрдиреНрдп рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЛ рдПрдХ рдлрд╝рдирдХрд╛рд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЗрд╕рдХреА рдШреЛрд╖рдгрд╛ рдореЗрдВ
@dynamicCallable рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред рдПрдХ
Reducer рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рд╕реА рд╕рд░рдгреА рдореЗрдВ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
@dynamicCallable struct Reducer { ... }
рдлрд┐рд░ рдЖрдкрдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдпрд╛ рджреЛрдиреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
func dynamicallyCall(withArguments: ExpressibleByArrayLiteral) func dynamicallyCall(withKeywordArguments: ExpressibleByDictionaryLiteral)
рдкрд╣рд▓рд╛ рдлрд╝рдВрдХреНрд╢рди рдЖрдкрдХреЛ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╕рд░рдгреА рдкрд╛рд╕ рдХрд░рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рджреВрд╕рд░рд╛ рдлрд╝рдВрдХреНрд╢рди рдЖрдкрдХреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рддрд░реНрдХреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрд╕реА рд╕рд░рдгреА рд╕реЗ рдЧреБрдЬрд░ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рддрд░реНрдХреЛрдВ рдХреЗ рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
Reducer рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
func dynamicallyCall(withArguments arguments: [Int]) -> Int { return arguments.reduce(0, +) }
рдлрд┐рд░ рдЗрд╕ рддрд░рд╣ рдХреА рд╕рдВрд░рдЪрдирд╛ рд▓рд╛рдЧреВ рдХрд░реЗрдВ:
let reducer = Reducer() let sum = reducer(1, 2, 3)
рд╣рдо
рддреБрд▓рдирд┐рддреНрд░ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рджреВрд╕рд░реА рд╡рд┐рдзрд┐ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╣рдо рджреЛ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
@dynamicCallable struct Comparator { func dynamicallyCall(withKeywordArguments arguments: KeValuePairs<String, Int>) -> ComparisonResult { guard let lhs = arguments["lhs"], let rhs = arguments["rhs"], lhs != rhs else { return .orderedSame } return lhs > rhs ? .orderedDescending : .orderedAscending } }
рдЖрдк рдЗрд╕ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
let comparator = Comparator() let comparisionResult = comparator(lhs: 1, rhs: 2)
рд╕реНрд╡рд┐рдЪ рдореЗрдВ рдЕрдЬреНрдЮрд╛рдд рд╡рд┐рд╢реЗрд╖рддрд╛ ( SE-0192 )
рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЬрдм рдЧрдгрдирд╛ рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕рднреА рдорд╛рдорд▓реЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдирд╛ рдФрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐ рдЗрд╕ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдореЗрдВ рдПрдХ рдЪреБрдЯрдХреА рд╕реБрд░рдХреНрд╖рд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЗрд╕рдореЗрдВ рдПрдХ рдЦрд╛рдореА рднреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЬрдм рдЧрдгрдирд╛ рдореЗрдВ рдорд╛рди рдмрджрд▓рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЕрдкрдирд╛ рд╕рдВрд╕рд╛рдзрди рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЕрднреА рднреА рдПрдХ рдореМрдХрд╛ рд╣реИ рдХрд┐ рд╕рд┐рд╕реНрдЯрдо рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреБрдЫ рдЧрдгрдирд╛рдУрдВ рдХреЛ рдмрджрд▓ рджреЗрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдЖрдкрдХреЗ рдЖрд╡реЗрджрди рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
LABiometryType рдХреЗ рд╕рд╛рде
рдерд╛ )ред
рд╕реНрд╡рд┐рдлреНрдЯ 5 рдореЗрдВ
рдЕрдЬреНрдЮрд╛рдд рд╡рд┐рд╢реЗрд╖рддрд╛
рдЬреЛрдбрд╝реА рдЬрд╛рдПрдЧреА, рдЬреЛ рдЖрдкрдХреЛ рдПрдиреНрдпреВрдорд░реЗрд╢рди рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреЗ рд╕рдордп 2 рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛:
- рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдХреЛрдб рд╕реНрд╡рд┐рдЪ рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рд╕рднреА рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП
- рд╕рднреА рдорд╛рдорд▓реЛрдВ рдХреЛ рд╕реНрд╡рд┐рдЪ рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдирдП рдЬреЛрдбрд╝реЗ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
рдЖрдЗрдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ:
enum HTTPMethod { case post, get, put }
рдХреЛрд╢рд┐рд╢ рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдбрдмрд▓ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИ? ( рдПрд╕рдИ -03030 )
рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ рдЗрд╕ рддрдереНрдп рдХреЛ рд▓реЗрдХрд░ рдЖрдП рд╣реИрдВ рдХрд┐ рдлреЗрдВрдХрдиреЗ рдпреЛрдЧреНрдп рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп, рдЬреЛ
рдкреНрд░рдпрд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ
рд╡реИрдХрд▓реНрдкрд┐рдХ рд▓реМрдЯрд╛рддрд╛ рд╣реИ
? рдкрд░рд┐рдгрд╛рдо рджреЛ
рд╡реИрдХрд▓реНрдкрд┐рдХ рдореЗрдВ рд▓рд┐рдкрдЯреЗ рдПрдХ рдкреНрд░рдХрд╛рд░ рд╣реИред рдпрд╣ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП рд╕реНрд╡рд┐рдлреНрдЯ 5 рдореЗрдВ, рдХреЙрд▓ рдХрд╛
рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ? рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ
рд╡реИрдХрд▓реНрдкрд┐рдХ рдореЗрдВ рд▓рд┐рдкрдЯреЗ рдПрдХ рдкреНрд░рдХрд╛рд░ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛ред
рдпрд╣ рд╕реНрд╡рд┐рдлреНрдЯ 5 рд╕реЗ рдкрд╣рд▓реЗ рдРрд╕рд╛ рдерд╛:
let result = try? optionalObject?.foo()
рдФрд░ рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕реНрд╡рд┐рдлреНрдЯ 5 рдореЗрдВ рд╣реЛрдЧрд╛:
let result = try? optionalObject?.foo()
рдЧреБрдгрди рдЬрд╛рдВрдЪ ( рдПрд╕рдИ -025 )
рдПрдХ рдирдВрдмрд░ рд╕реЗ рджреВрд╕рд░реЗ рдирдВрдмрд░ рдХреА рдмрд╣реБрд▓рддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рд╡рд┐рднрд╛рдЬрди рдХреЗ рд╢реЗрд╖ рднрд╛рдЧ (%) рдХреЗ рдмрдЬрд╛рдп
isMultiple (:) рдлрд╝рдВрдХреНрд╢рди
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
рдкрд░рд┐рд╡рд░реНрддрди рдорд╛рдореВрд▓реА рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХреЛрдб рдХреЛ рдереЛрдбрд╝рд╛ рд╕реНрдкрд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХреЛрдб рджреНрд╡рд╛рд░рд╛ рдЦреЛрдЬ рдХреЛ рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИред
рдХрд┐рд╕реА рд╕рд┐рдЪреБрдПрд╢рди рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдЧрд┐рдирдирд╛ ( SE-0220 )
рд╕реНрд╡рд┐рдлреНрдЯ 5 рдореЗрдВ, рдЕрдиреБрдХреНрд░рдо рдкреНрд░рдХрд╛рд░
рдЧрд┐рдирддреА рдЬреЛрдбрд╝ рджреЗрдЧрд╛
(рдЬрд╣рд╛рдВ: (рддрддреНрд╡) -> рдмреВрд▓) -> рдЗрдВрдЯ рд╡рд┐рдзрд┐, рдЬреЛ рдЖрдкрдХреЛ рдПрдХ рдЕрдиреБрдХреНрд░рдо рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдЧрд┐рдирдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ рдЬреЛ рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рд╢рд░реНрдд рдХреЛ рдПрдХ рдкрд╛рд╕ рдореЗрдВ рд╕рдВрддреБрд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ, рдореБрдЭреЗ
рдЧрд┐рдирддреА рдХреЗ рд╕рд╛рде
рдлрд┐рд▓реНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдерд╛ред рдпрд╣ рд╡рд┐рдзрд┐
рдлрд╝рд┐рд▓реНрдЯрд░ рд╡рд┐рдзрд┐ рдореЗрдВ рдПрдХ рдирдпрд╛ рд╕рд░рдгреА рдмрдирд╛рддреЗ рд╕рдордп рдЖрд╡рдВрдЯрд┐рдд рдореЗрдореЛрд░реА рдХреЛ рдмрдЪрд╛рдПрдЧрд╛ред
рдПрдХ рдЙрджрд╛рд╣рд░рдг:
let countOfZeroes = [0, 1, 2, 0, 4].count(where: { $0 == 0 })
рд╢рдмреНрджрдХреЛрд╢ рдореЗрдВ CompactMapValues тАЛтАЛрд╡рд┐рдзрд┐ ( рдПрд╕рдИ -0218)
рдпрд╣ рд╡рд┐рдзрд┐
Array рд╕реЗ
рдХреЙрдореНрдкреИрдХреНрдЯ рдореИрдк рдФрд░
Dictionary рд╕реЗ
MapValues рдХреЛ рдЬреЛрдбрд╝рддреА рд╣реИред рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд░реВрдкрд╛рдВрддрд░рд┐рдд рдорд╛рдиреЛрдВ рд╡рд╛рд▓рд╛ рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ
рд╢реВрдиреНрдп рдХреЗ рдмрд░рд╛рдмрд░ рдХреЛрдИ рдореВрд▓реНрдп рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред
рдПрдХ рдЙрджрд╛рд╣рд░рдг:
let dictionary = ["a": "1", "b": "2", "c": "Number"] let resultDictionary = dictionary.compactMapValues { Int($0) }
рдХрдЪреНрдЪреЗ рддрд╛рд░ ( SE-0200 )
рдЙрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрди рдФрд░ рдмреИрдХрд╕реНрд▓реИрд╢ рдирд┐рдпрдорд┐рдд рд╡рд░реНрдг рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рд╡рд┐рд╢реЗрд╖ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрдВрдХреНрддрд┐ рдХреЗ рдЕрдВрдд рдореЗрдВ рдФрд░ рдЕрдВрдд рдореЗрдВ # рд╡рд░реНрдг рдЬреЛрдбрд╝реЗрдВред
рдПрдХ рдЙрджрд╛рд╣рд░рдг:
let string1 = #" " ""# let string2 = #" \ "#
рдпрджрд┐ рдЖрдк рдПрдХ рд▓рд╛рдЗрди рдмрдирд╛рддреЗ рд╕рдордп рдПрдХ рдЪрд░ рдбрд╛рд▓ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдмреИрдХрд╕реНрд▓реИрд╢ рдХреЗ рдмрд╛рдж рдЖрдкрдХреЛ # рд╕рд╛рдЗрди рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
let string = #" \#(variable)"#
рдпрджрд┐ рд░реЗрдЦрд╛ рдореЗрдВ рдПрдХ # рдЪрд┐рд╣реНрди рд╣реИ, рддреЛ рд╢реБрд░реБрдЖрдд рдореЗрдВ рдФрд░ рдкрдВрдХреНрддрд┐ рдХреЗ рдЕрдВрдд рдореЗрдВ рдЖрдкрдХреЛ рджреЛ ## рд╕рдВрдХреЗрдд рдЬреЛрдбрд╝рдиреЗ рд╣реЛрдВрдЧреЗ:
let string = ##" #"##
рдЕрдиреБрдХреНрд░рдо рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдореЗрдВ рдЕрдм рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░рдХрд╛рд░ рдЙрдк - рдЕрдиреБрдХреНрд░рдо ( SE-0234 ) рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИ
рдЙрдк- рдЕрдиреБрдХреНрд░рдо рдХреЗ рд╕рд╛рд╣рдЪрд░реНрдп рдкреНрд░рдХрд╛рд░ рдХреЛ
рдЕрдиреБрдХреНрд░рдо рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╕реЗ
рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рд▓реЗ рдЬрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ
ред рдЕрдм рдЕрдиреБрдХреНрд░рдо рдореЗрдВ рд╕рднреА рд╡рд┐рдзрд┐рдпрд╛рдБ рдЬреЛ
рдЙрдк- рдЕрдиреБрдХреНрд░рдо рдХреЛ
рд▓реМрдЯрд╛рддреА рд╣реИрдВ рд╡реЗ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рдХрд╛рд░
рд▓реМрдЯрд╛рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
рдкреНрд░рддреНрдпрдп рд╡рд┐рдзрд┐ рдЕрдм рдПрдХ
рдРрд░реЗ рдХреЛ рд▓реМрдЯрд╛рддреА рд╣реИред рдЗрд╕ рдкрд░рд┐рд╡рд░реНрддрди рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рд╡рд┐рдзрд┐рдпреЛрдВ рдХреА рдкреВрд░реА рд╕реВрдЪреА рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
extension Sequence { public func dropFirst(_ k: Int = 1) -> DropFirstSequence<Self> public func dropLast(_ k: Int = 1) -> [Element] public func suffix(_ maxLength: Int) -> [Element] public func prefix(_ maxLength: Int) -> PrefixSequence<Self> public func drop(while predicate: (Element) throws -> Bool) rethrows -> DropWhileSequence<Self> public func prefix(while predicate: (Element) throws -> Bool) rethrows -> [Element] public func split( maxSplits: Int = Int.max, omittingEmptySubsequences: Bool = true, whereSeparator isSeparator: (Element) throws -> Bool ) rethrows -> [ArraySlice<Element>] }
рдЕрдм рдЗрди рддрд░реАрдХреЛрдВ рд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдкреНрд░рддрд┐рдмрдВрдз
рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдЕрдм рдЙрди рд╡рд░реНрдЧреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рддрд┐рдмрдВрдз рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЗрд╕ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдЕрдм рдЖрдк рд╕рдВрдХреЗрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗрд╡рд▓ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд░реНрдЧ рджреНрд╡рд╛рд░рд╛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
protocol Viewable: UIView {} protocol Viewable where Self: UIView {}
рджреВрд╕рд░рд╛ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рд╡рд┐рдХрд▓реНрдк рд╕реНрд╡рд┐рдлреНрдЯ 4.2 рдореЗрдВ рд╕рдорд░реНрдерд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдВрдХрд▓рди рддреНрд░реБрдЯрд┐ рдпрд╛ рд░рдирдЯрд╛рдЗрдо рдХрд╛ рдХрд╛рд░рдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╕реНрд╡рд┐рдлреНрдЯ 5 рдореЗрдВ, рдпрд╣ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реЛрдЧреАред
рдирд┐рд╖реНрдХрд░реНрд╖
рдпрд╣ рд╕реНрд╡рд┐рдлреНрдЯ 5 рдореЗрдВ рдмрджрд▓рд╛рд╡реЛрдВ рдХреА рдкреВрд░реА рд╕реВрдЪреА рдирд╣реАрдВ рд╣реИ, рдХреЗрд╡рд▓ рдореБрдЦреНрдп рдкрд░рд┐рд╡рд░реНрддрди рдпрд╣рд╛рдВ рдПрдХрддреНрд░ рдХрд┐рдП рдЧрдП рд╣реИрдВред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдП рдЧрдП рдкрд░рд┐рд╡рд░реНрддрди рд╕рдХрд╛рд░рд╛рддреНрдордХ рд╣реИрдВ рдФрд░ рднрд╛рд╖рд╛ рдХреЛ рдЕрдзрд┐рдХ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рдФрд░ рд▓рдЪреАрд▓рд╛ рдмрдирд╛рддреЗ рд╣реИрдВред рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ "рд╡рд░реНрддрдорд╛рди рд╕реНрд╡рд┐рдлреНрдЯ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдореЗрдВ рдХрдирд╡рд░реНрдЯ рдХрд░реЗрдВ" рджрд░реНрдж рд░рд╣рд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдпрд╣ рд╕рдм, рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред