рд╕реНрд╡рд┐рдлреНрдЯ 5 - рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдкреНрд░рддреАрдХреНрд╖рд┐рдд рд░рд┐рд▓реАрдЬ, рдЬрд┐рд╕рдореЗрдВ рдХрдИ рджрд░реНрдЬрди рд╕реБрдзрд╛рд░ рдФрд░ рд╕реБрдзрд╛рд░ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╕реНрд╡рд┐рдлреНрдЯ 5.0 рдХреА рд░рд┐рд▓реАрдЬ рдХрд╛ рдореБрдЦреНрдп рд▓рдХреНрд╖реНрдп рдПрдмреАрдЖрдИ рд╕реНрдерд┐рд░рддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдерд╛ред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдЖрдк рд╕реАрдЦреЗрдВрдЧреЗ рдХрд┐ ABI рдХреНрдпрд╛ рд╣реИ рдФрд░ ABI iOS / macOS рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдХреНрдпрд╛ рд╕реНрдерд┐рд░ рджреЗрдЧрд╛ред рд╣рдо рд╕реНрд╡рд┐рдлреНрдЯ 5 рдХреА рдХрдИ рдирдИ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рднреА рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗред

рдПрдмреАрдЖрдИ рд╕реНрдерд┐рд░рддрд╛
ABI рдПрдХ рдмрд╛рдЗрдирд░реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИред рдПрдХ рдПрдмреАрдЖрдИ рдХреЛ рдирд┐рдпрдореЛрдВ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рд╕рдВрдХрд▓рдХ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдШрдЯрдХ рдореЙрдбреНрдпреВрд▓ рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рддрджрдиреБрд╕рд╛рд░, рдПрдмреАрдЖрдИ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд░реНрдгрд┐рдд рд╣реИред
- рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рд╕рд┐рд╕реНрдЯрдо рдореЙрдбреНрдпреВрд▓ рд╕рд╣рд┐рдд рд╡рд┐рднрд┐рдиреНрди рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдХреЛрдб рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
- рддрд░реНрдХреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдФрд░ рдлрд╝рдВрдХреНрд╢рдВрд╕ рд╕реЗ рд░рд┐рдЯрд░реНрди рд╡реИрд▓реНрдпреВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╛рд░реВрдкред
- рд░реИрдо рдбреЗрдЯрд╛ рд▓реЗрдЖрдЙрдЯ рдПрд▓реНрдЧреЛрд░рд┐рджрдоред
- рдореЗрдореЛрд░реА рдкреНрд░рдмрдВрдзрди, рдПрдЖрд░рд╕реАред
- рдЯрд╛рдЗрдк рд╕рд┐рд╕реНрдЯрдо, рдЬреЗрдирд░рд┐рдХред
рд╕реНрд╡рд┐рдлреНрдЯ 5, рд╕реНрдерд┐рд░ рдПрдмреАрдЖрдИ рдХреЗ рд╕рд╛рде, рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рджреНрд╡рд┐рдЖрдзрд╛рд░реА рд╕рдВрдЧрддрддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред IOS / macOS рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рджреНрд╡рд┐рдЖрдзрд╛рд░реА рд╕рдВрдЧрддрддрд╛ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╕рдВрдХрд▓рд┐рдд рдЕрдиреБрдкреНрд░рдпреЛрдЧ рднрд╛рд╖рд╛ рдХреЗ рдкрд╣рд▓реЗ рдпрд╛ рдмрд╛рдж рдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕рдВрдХрд▓рд┐рдд рд╕рд┐рд╕реНрдЯрдо рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╕рд╛рде рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рд╕рдВрдЧрдд рд╣реЛрдВрдЧреЗред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реНрд╡рд┐рдлреНрдЯ 5.0 рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рд┐рдд рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реНрд╡рд┐рдлреНрдЯ 5.1 рдпрд╛ рд╕реНрд╡рд┐рдлреНрдЯ 6.0 рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рд┐рдд рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рд╣реЛрдЧрд╛ред
IOS 12.2 рдФрд░ macOS 10.14.4 рдХреЗ рд╕рд╛рде рд╢реБрд░реВ, Apple рдХреЗ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд╕рдм рдХреБрдЫ рд╣реЛрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рдЖрдкрдХреЛ рд╕реНрд╡рд┐рдлреНрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓рд╛рдиреЗ рд╣реЛрдВрдЧреЗред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╕реНрд╡рд┐рдлреНрдЯ 5 рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдФрд░ рдмрд╛рдж рдореЗрдВ рд░рдирдЯрд╛рдЗрдо рдФрд░ рдПрдХ рдорд╛рдирдХ рднрд╛рд╖рд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рд╕реНрд╡рд┐рдлреНрдЯ 5 рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рд╡рдЬрди рд▓рдЧрднрдЧ 3-10 рдореЗрдЧрд╛рдмрд╛рдЗрдЯ рдХрдо рд╣реЛрдЧрд╛ред
рдпрд╣ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдПрдмреАрдЖрдИ рд╕реНрдерд┐рд░рддрд╛ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореЙрдбреНрдпреВрд▓ рд╕реНрдерд┐рд░рддрд╛ рднреА рд╣реИред рдпрджрд┐ ABI рд╕реНрдерд┐рд░рддрд╛ рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдПрдХ рд╕реНрд╡рд┐рдлреНрдЯ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ, рддреЛ рдореЙрдбреНрдпреВрд▓ рд╕реНрдерд┐рд░рддрд╛ рдЗрд╕ рдмрд╛рдд рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ рдХрд┐ рднрд╛рд╖рд╛ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рджреНрд╡рд┐рдЖрдзрд╛рд░реА рдврд╛рдВрдЪреЗ рдХреЛ рдХреИрд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕реНрд╡рд┐рдлреНрдЯ 5.1 рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рд╕реНрдерд┐рд░рддрд╛ рджрд┐рдЦрд╛рдИ рджреЗрдЧреАред рдФрд░ рдлрд┐рд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЕрдкрдиреЗ рдврд╛рдВрдЪреЗ рдХреЛ рди рдХреЗрд╡рд▓ рдЦреБрд▓реЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЗ рд╕рд╛рде рд╡рд┐рддрд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗ, рдмрд▓реНрдХрд┐ рд╕рдВрдХрд▓рд┐рдд рд░реВрдк рдореЗрдВ рднреАред
ABI рд╕реНрдерд┐рд░рддрд╛ рдХреЗ рдкреЗрд╢реЗрд╡рд░реЛрдВред
- рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХрдо рд╡рдЬрди рд╣реЛрдЧрд╛ред
- рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рддреЗрдЬреАред
- рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, Apple рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрд╡рд┐рдлреНрдЯ рдкрд░ рдирдИ рд░реВрдкрд░реЗрдЦрд╛ рд▓рд┐рдЦ тАЛтАЛрд╕рдХрддрд╛ рд╣реИред
рд╡рд┐рдкрдХреНрд╖ рдПрдмреАрдЖрдИ рд╕реНрдерд┐рд░рддрд╛ред
рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рдХрд┐рд╕реА рднреА рдирдИ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреА рдХрдореА рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдХрд┐рд╕реА рднреА рдирдП рд╡рд░реНрдЧреЛрдВ / рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕реНрд╡рд┐рдлреНрдЯ 5.1 iOS 13 рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ iOS 12.2 рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде, рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рдкрд╛рдПрдВрдЧреЗред (рдЖрдкрдХреЛ рдлрд╛рдЙрдВрдбреЗрд╢рди, рдпреВрдЖрдИрдХрд┐рдЯ рдФрд░ рдЕрдиреНрдп рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд▓рд┐рдП рдЙрд╕реА рддрд░рд╣ рд╕реЗ # рдЕрд╡реЗрд▓реЗрдмрд▓ (...) рдЪреЗрдХ рдбрд╛рд▓рдиреЗ рд╣реЛрдВрдЧреЗред
рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рдХрд╛рд░
рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдПрдкреАрдЖрдИ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рдВрдЪрд╛рд░рд┐рдд рдХрд░рдиреЗ рдФрд░ рд╕рдВрднрд╛рд▓рдиреЗ рдХрд╛ рдПрдХ рдорд╛рдирдХ рддрд░реАрдХрд╛ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ рд╣реИред рдЖрдк рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рдХрд┐рд╕реА рдХрд╛рд░рдгрд╡рд╢ рдорд╛рдирдХ рддреНрд░реБрдЯрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ / рдкрдХрдбрд╝ рд╣рдореЗрдВ рд╢реЛрднрд╛ рдирд╣реАрдВ рджреЗрддреА рд╣реИред
рдкрд░рд┐рдгрд╛рдо рдкреНрд░рдХрд╛рд░ рджреЛ рдорд╛рдорд▓реЛрдВ рдХреЗ рд╕рд╛рде enum рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рд╕рдлрд▓рддрд╛ рдФрд░ рд╡рд┐рдлрд▓рддрд╛:
public enum Result<Success, Failure> where Failure: Error { case success(Success) case failure(Failure) ... }
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕реНрд╡рд┐рдлреНрдЯ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдирдпрд╛ рдирд╣реАрдВ рд╣реИред рдХрднреА рд╕реНрд╡рд┐рдлреНрдЯ рдХреЗ рдкрд╣рд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдмрд╛рдж рд╕реЗ, рдХрдИ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рдПрдХ рд╕рдорд╛рди рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдм, рдЬрдм рдкрд░рд┐рдгрд╛рдо рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ рд╣реИ, рддреЛ рдпрд╣ рдмрд╛рд╣рд░реА рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рд╕реЗ рдХреЛрдб рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХреЛ рд╕рд░рд▓ рдХрд░реЗрдЧрд╛ред
рд▓реЗрдЦ рдбрд╛рдЙрдирд▓реЛрдб рд╕реЗрд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг:
struct Article { let title: String } class ArticleService { func fetchArticle(id: Int64, completion: @escaping (Result<Article, Error>) -> Void) {
рдФрд░ рдпрд╣рд╛рдВ рдкрд░рд┐рдгрд╛рдо рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред рдЪреВрдВрдХрд┐ рдкрд░рд┐рдгрд╛рдо рд╕рд┐рд░реНрдл рдПрдХ рдПрдирдо рд╣реИ, рд╣рдо рдЗрд╕рдХреЗ рд╕рднреА рд░рд╛рдЬреНрдпреЛрдВ рдХреЛ рдПрдХ рд╕реНрд╡рд┐рдЪ рдХреЗ рд╕рд╛рде рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
articleService.fetchArticle(id: 42) { result in switch result { case .success(let article): print("Success: \(article)") case .failure(let error): print("Failure: \(error)") } }
рдХрдЪреНрдЪреЗ рддрд╛рд░
рд╕реНрд╡рд┐рдлреНрдЯ 5 рдореЗрдВ, рдЙрдиреНрд╣реЛрдВрдиреЗ рддрдерд╛рдХрдерд┐рдд рдХрдЪреНрдЪреЗ рддрд╛рд░ рдЬреЛрдбрд╝реЗ, рдЬрд┐рд╕рдореЗрдВ рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрдиреЛрдВ рдФрд░ рдмреИрдХрд▓реИрд╢ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдмрд┐рд▓реНрдХреБрд▓ рдкрд╛рддреНрд░реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдХреА рдЧрдИ рд╣реИ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╢рд╛рдмреНрджрд┐рдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рднрд╛рдЧрдиреЗ рд╡рд╛рд▓реЗ рдЪрд░рд┐рддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдРрд╕реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рд╢рд╛рдмреНрджрд┐рдХ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХрд┐рдирд╛рд░реЛрдВ рдкрд░ # рд╡рд░реНрдг рдХреЛ рджреЛрд╣рд░реЗ рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрдиреЛрдВ рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред
рдЙрджреНрдзрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг:
рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд▓рд┐рдЦрддреЗ рд╕рдордп рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧреА рд╣реИ:
рдмреИрдХрд╕реНрд▓реИрд╢ рдХреЗ рдмрд╛рдж рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдкреНрд░рдХреНрд╖реЗрдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, # рд╡рд░реНрдг рдЬреЛрдбрд╝реЗрдВ:
рдЖрдк рдЗрд╕ рд╡рд╛рдХреНрдп рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред
рдЕрджреНрдпрддрди рд▓рд╛рдЗрди рдкреНрд░рдХреНрд╖реЗрдк
рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рдХреНрд╖реЗрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛, рд╣рдо рдПрдХ рдЪрд░ рдХреЗ рдореВрд▓реНрдп рдпрд╛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╢рд╛рдмреНрджрд┐рдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рднрд╛рд╖рд╛ рдХреЗ 5 рд╡реЗрдВ рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рд╢реБрд░реВ рд╣реЛрдХрд░, рд╣рдорд╛рд░реА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдЕрдВрддрд┐рдо рдкрдВрдХреНрддрд┐ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЧрдпрд╛ред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдмрд╕ DefaultStringInterpolation рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд▓рд┐рдЦреЗрдВ рдФрд░ appendInterpolation рдирд╛рдордХ рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реЗрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рд╣рдо рдПрдХ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдПрдХ рдореВрд▓реНрдп рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:
extension DefaultStringInterpolation { mutating func appendInterpolation(price: Decimal) { let formatter = NumberFormatter() formatter.numberStyle = .currency if let string = formatter.string(from: price as NSDecimalNumber) { appendLiteral(string) } else { appendLiteral(price.description) } } } print("Price of item: \(price: 9.99)")
рдпрд╣ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐, рд╕рдВрдХрд▓рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдирд┐рд░реНрдорд╛рдг (рдореВрд▓реНрдп: 9.99) рдХреЛ рдПрдкреЗрдВрдбрдЗрдВрдЯрд░рдкреЛрд▓реЗрд╢рди (рдореВрд▓реНрдп: рджрд╢рдорд▓рд╡) рд╡рд┐рдзрд┐ рдореЗрдВ рдПрдХ рдХреЙрд▓ рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдкрд░рд┐рд╢рд┐рд╖реНрдЯ рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рд╣рдо рдЕрд╕реАрдорд┐рдд рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рддрд░реНрдХреЛрдВ рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рджреЛрдиреЛрдВ рдирд╛рдо рдФрд░ рдЕрдирд╛рдо, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рдпрд╛ рдмрд┐рдирд╛ред
рдЖрдк рдЗрд╕ рд╡рд╛рдХреНрдп рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред
рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреА рдмрд╣реБрд▓рддрд╛ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдирд╛
рдмрд╣реБрд▓рддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рд╡рд┐рдзрд┐ рд╣реИрдореМрд▓реНрдЯ (рдорд╛рдирдХ рдХреА) рдХреЛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИред рд╣рд╛рдВ, рд╣рдо рдЕрднреА рднреА рд╢реЗрд╖% рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ Multiple (рдореЗрдВ рд╕реЗ :) рдЕрдзрд┐рдХ рджреГрд╢реНрдп рджрд┐рдЦрддрд╛ рд╣реИред
let interger = 42 if interger.isMultiple(of: 3) { print(" ") } else { print(" ") }
рд╢рдмреНрджрдХреЛрд╢ рдореЗрдВ CompactMapValues тАЛтАЛрд╡рд┐рдзрд┐
CompactMapValues тАЛтАЛрд╡рд┐рдзрд┐ рдЖрдкрдХреЛ рд╢рдмреНрджрдХреЛрд╢ рдорд╛рдиреЛрдВ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ, рд╕рд╛рде рд╣реА рдЙрдиреНрд╣реЗрдВ рдлрд╝рд┐рд▓реНрдЯрд░ рднреА рдХрд░рддреА рд╣реИ рдпрджрд┐ рд░реВрдкрд╛рдВрддрд░рдг рд╢реВрдиреНрдп рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, URL рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреА рдореИрдкрд┐рдВрдЧ:
let dict = [ "site": "https://www.site.ru/path/to/web/site/page", "other site": "invalid url" ] let mappedDict: [String: URL] = dict.compactMapValues { URL(string: $0) } print(mappedDict)
рджреВрд╕рд░реА рдХреБрдВрдЬреА / рдорд╛рди рдЬреЛрдбрд╝реА рдХреЛ рдореИрдкрд┐рдВрдЧ рдХреЗ рдмрд╛рдж рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдПрдХ рдорд╛рдиреНрдп URL рдирд╣реАрдВ рд╣реИред
рд╡реНрдпрд╡рд╣рд╛рд░ рдмрджрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ?
рдХреЛрд╢рд┐рд╢ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрд╡рд┐рдлреНрдЯ 4.2 рдореЗрдВ? рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдШреЛрдВрд╕рд▓реЗ рдХреЗ рд╢рд┐рдХрд╛рд░ рдХреЗ рд╕реНрддрд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рдкреНрд░рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдпрд╣ рд╡рд╣ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдЙрдореНрдореАрдж рд╣реИред рдЗрд╕ рдХрд╛рд░рдг рд╕реЗ, рд╕реНрд╡рд┐рдлреНрдЯ 5 рдореЗрдВ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ? рдЧ рд╡реИрдХрд▓реНрдкрд┐рдХ рдЪрд╛рдЗрдирд┐рдВрдЧ рдХреЗ рд╕рдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдорд┐рд▓рд╛ред рдпрд╣реА рд╣реИ, рдХреЛрд╢рд┐рд╢ рдХреЗ рд╕рдВрдпреЛрдЬрди рдХреЗ рд╕рд╛рде? рд╡реИрдХрд▓реНрдкрд┐рдХ рдЪреЗрдирд┐рдВрдЧ рдпрд╛ рд╡реИрдХрд▓реНрдкрд┐рдХ рдХрд╛рд╕реНрдЯрд┐рдВрдЧ рдХреЗ рд╕рд╛рде, рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдШреЛрдВрд╕рд▓реЗ рдХреЗ рдПрдХ рд╕реНрддрд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реЛрдЧрд╛ред
рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ? рд╕рд╛рде рдореЗрдВ:
рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ? рдПрдХ рд╕рд╛рде рд╡реИрдХрд▓реНрдкрд┐рдХ рд╡рд╕реНрддреБ рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде:
рдЖрдк рдЗрд╕ рд╡рд╛рдХреНрдп рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред
@ рдбрд╛рдпрдирд╛рдорд┐рдХ рдХреЙрд▓ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛
рдирдИ @dynamicCallable рд╡рд┐рд╢реЗрд╖рддрд╛ рдЖрдкрдХреЛ "рдХреЙрд▓ рдХрд░рдиреЗ рдпреЛрдЧреНрдп" рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдо рдЯрд╛рдЗрдк рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдзрд┐ рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВред
рдпрджрд┐ рд╣рдо @dynamicCallable рдХреЗ рд░реВрдк рдореЗрдВ рдЯрд╛рдЗрдк рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ (рдпрд╛ рджреЛрдиреЛрдВ) рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
func dynamicallyCall(withArguments: <#Arguments#>) -> <#R1#> func dynamicallyCall(withKeywordArguments: <#KeywordArguments#>) -> <#R2#>
рддрд░реНрдХ рдкреНрд░рдХрд╛рд░ ExpressibleByArrayLiteral рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, KeywordArguments рдкреНрд░рдХрд╛рд░ рдХреЛ ExpressibleByDictionaryLiteral рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ R1 рдФрд░ R2 рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рдо рдХреА рд╕рдВрд░рдЪрдирд╛ред рдЬрдм рдЖрдк рдЗрд╕реЗ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдХрд┐рд╕реА рднреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрдирдХреА рд░рд╛рд╢рд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
@dynamicCallable struct Sum { func dynamicallyCall(withArguments args: [Int]) -> Int { return args.reduce(0, +) } } let sum = Sum() let result = sum(1, 2, 3, 4) print(result)
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдХрдВрдкрд╛рдЗрд▓рд░ рд░рд╛рд╢рд┐ (1, 2, 3, 4) рдХреЛ рдХреЙрд▓ рдореЗрдВ sum.dynamicallyCall (withArguments: [1, 2, 3, 4]) рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕реА рддрд░рд╣ рдбрд╛рдпрдирд╛рдорд┐рдХ рд░реВрдк рд╕реЗ (withKeywordArguments :) рд╡рд┐рдзрд┐ред
рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдЖрдкрдХреЛ рд╡рд┐рднрд┐рдиреНрди рдЧрддрд┐рд╢реАрд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╕реНрд╡рд┐рдлреНрдЯ рдХреЛрдб рдХреЗ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрд╛рдпрдерди рдпрд╛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯред
рдЖрдк рдЗрд╕ рд╡рд╛рдХреНрдп рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред
рд╕рдВрдХрд▓рдХ рд╕рдВрд╕реНрдХрд░рдг рдФрд░ рднрд╛рд╖рд╛ рдХреА рдЬрд╛рдВрдЪ рдХреЗ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдореЗрдВ рдХрдо рдСрдкрд░реЗрдЯрд░ рд╕рдорд░реНрдерди
рд╕реНрд╡рд┐рдлреНрдЯ рдХреЗ 5 рд╡реЗрдВ рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рд╢реБрд░реВ рд╣реЛрдХрд░, рдЖрдк рдХреЛрдб рдореЗрдВ рдХрдВрдкрд╛рдЗрд▓рд░ рд╕рдВрд╕реНрдХрд░рдг рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╕рдордп "рдХрдо" рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
рдирд┐рд╖реНрдХрд░реНрд╖
рдпреЗ рд╕рднреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рдФрд░ рд╕реБрдзрд╛рд░ рдирд╣реАрдВ рд╣реИрдВ рдЬреЛ рд╕реНрд╡рд┐рдлреНрдЯ 5 рдореЗрдВ рджрд┐рдЦрд╛рдИ рджрд┐рдПред рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░, рд╕рдореБрджрд╛рдп рд╕реЗ 28 рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛, рдЬрд┐рд╕рдореЗрдВ рд▓рд╛рдЗрди рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рд╕реБрдзрд╛рд░, рд╕реНрд╡рд┐рдлреНрдЯ рдкреИрдХреЗрдЬ рдореИрдиреЗрдЬрд░ рдореЗрдВ рд╕реБрдзрд╛рд░ рдФрд░ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рднреА рд╢рд╛рдорд┐рд▓ рдереЗред рдкрд░рд┐рд╡рд░реНрддрди рдФрд░ рд╕реБрдзрд╛рд░ рдХреА рдкреВрд░реА рд╕реВрдЪреА рдЬрд╛рд░реА рдиреЛрдЯреЛрдВ рдореЗрдВ рдкрд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИред