{"id":313404,"date":"2020-11-19T09:00:28","date_gmt":"2020-11-19T09:00:28","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=313404"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=313404","title":{"rendered":"\u0412\u043f\u0435\u0447\u0430\u0442\u043b\u0435\u043d\u0438\u0435 \u043e\u0442 \u0421\u0442\u044d\u043d\u0444\u043e\u0440\u0434\u0441\u043a\u0438\u0445 \u043a\u0443\u0440\u0441\u043e\u0432 CS193P \u0412\u0435\u0441\u043d\u0430 2020 \u0433.: \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e SwiftUI"},"content":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/wt\/je\/nq\/wtjenqmuhfl8yyj9xfsimwqmxhg.png\"><\/p>\n<p>  \u0421\u0442\u044d\u043d\u0444\u043e\u0440\u0434\u0441\u043a\u0438\u0439 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442, \u0421\u0428\u0410 \u2014 \u043e\u0434\u0438\u043d \u0438\u0437 \u043b\u0443\u0447\u0448\u0438\u0445 \u0432 \u043c\u0438\u0440\u0435 \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u043a\u0438 (Computer Science). \u041e\u043d \u0449\u0435\u0434\u0440\u043e \u0434\u0435\u043b\u0438\u0442\u0441\u044f \u0441\u0432\u043e\u0438\u043c\u0438 \u043a\u0443\u0440\u0441\u0430\u043c\u0438, \u0438 \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u0441\u0430\u043c\u044b\u0445 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0438 \u0443\u0441\u043f\u0435\u0448\u043d\u044b\u0445 \u043a\u0443\u0440\u0441\u043e\u0432 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u0443\u0440\u0441 <code>CS193P<\/code> \u043f\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043d\u0430 <code>iOS<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0447\u0438\u0442\u0430\u0435\u0442 \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u043e\u0440 \u041f\u043e\u043b \u0425\u044d\u0433\u0435\u0440\u0442\u0438. <br \/>  \u041f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0435 \u0432 \u0432\u0435\u0441\u0435\u043d\u043d\u0435\u043c \u0441\u0435\u043c\u0435\u0441\u0442\u0440\u0435 2020 \u0433\u043e\u0434\u0430 \u043b\u0435\u043a\u0446\u0438\u0438 \u0421\u0442\u044d\u043d\u0444\u043e\u0440\u0434\u0441\u043a\u043e\u0433\u043e \u043a\u0443\u0440\u0441\u0430 <code>CS193P<\/code> \u00abDeveloping\u00a0 Application for iOS with SwiftUI\u00bb\u00a0(\u00ab\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0434\u043b\u044f iOS \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c SwiftUI\u00bb) \u0431\u044b\u043b\u0438 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043d\u044b \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u0430\u043c \u0421\u0442\u044d\u043d\u0444\u043e\u0440\u0434\u0430 \u0441 \u043e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u0435\u0439 \u043d\u0430 \u043d\u043e\u0432\u044b\u0439 \u043f\u0440\u043e\u0434\u0443\u043a\u0442, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 <code>Apple<\/code> \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c \u0432 2019 \u0433, \u2014 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a <code>SwiftUI<\/code> \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0440\u0435\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 (UI). \u041d\u0430 <a href=\"https:\/\/cs193p.sites.stanford.edu\/\" rel=\"nofollow\">\u0441\u0430\u0439\u0442\u0435 \u043a\u0443\u0440\u0441\u0430\u00a0<\/a>\u0432\u044b \u043d\u0430\u0439\u0434\u0435\u0442\u0435 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u044b\u043b\u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u0430\u043c \u0421\u0442\u044d\u043d\u0444\u043e\u0440\u0434\u0430 \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0435 \u0432\u0435\u0441\u0435\u043d\u043d\u0435\u0433\u043e \u0441\u0435\u043c\u0435\u0441\u0442\u0440\u0430 2020 \u0433.: \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0432\u0438\u0434\u0435\u043e, \u0441\u043b\u0430\u0439\u0434\u044b, \u0434\u043e\u043c\u0430\u0448\u043d\u0438\u0435 \u0437\u0430\u0434\u0430\u043d\u0438\u044f \u0438 \u043a\u043e\u0434 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432. <\/p>\n<p>  <code>SwiftUI<\/code> \u2014 \u044d\u0442\u043e \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043d\u043e\u0432\u0430\u044f \u0432\u0435\u0449\u044c, \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0431\u044b\u043b\u043e \u0432\u0441\u0435\u0433\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0435\u0441\u044f\u0446\u0435\u0432 \u043e\u0442 \u0440\u043e\u0434\u0443 \u043d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u0440\u043e\u0447\u0442\u0435\u043d\u0438\u044f \u043b\u0435\u043a\u0446\u0438\u0439. \u041d\u043e \u044d\u0442\u043e \u0441\u0430\u043c\u044b\u0439 \u043f\u0435\u0440\u0435\u0434\u043e\u0432\u043e\u0439 \u043a\u0440\u0430\u0439 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435, \u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u0434\u043e\u0431\u0440\u0430\u043b\u0438\u0441\u044c \u0434\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043d\u0430 <code>iOS<\/code>. \u0412 \u0438\u044e\u043d\u0435 2020 \u0433. \u0441\u043e\u0441\u0442\u043e\u044f\u043b\u0430\u0441\u044c \u043c\u0435\u0436\u0434\u0443\u043d\u0430\u0440\u043e\u0434\u043d\u0430\u044f \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432<code> Apple WWDC <\/code>\u0438 \u0442\u0430\u043c \u0431\u044b\u043b\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f <code>SwiftUI 2.0<\/code>. \u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u0432\u0435\u0440\u0441\u0438\u0438 <code>SwiftUI 2.0<\/code> \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u044b \u043d\u0430 <a href=\"https:\/\/cs193p.sites.stanford.edu\/\" rel=\"nofollow\"> \u0441\u0430\u0439\u0442\u0435 \u043a\u0443\u0440\u0441\u0430<\/a> \u043d\u0430 \u0437\u0430\u043a\u043b\u0430\u0434\u043a\u0435 <code>WWDC<\/code>.<br \/>  <a name=\"habracut\"><\/a><br \/>  \u0415\u0441\u043b\u0438 \u0432\u044b \u0443\u0436\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u043d\u0430 <code>iOS<\/code> \u0440\u0430\u043d\u0435\u0435 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c <code>UIKit<\/code>, \u0433\u043e\u0442\u043e\u0432\u044c\u0442\u0435\u0441\u044c \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u0435\u0440\u0435\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0441\u0432\u043e\u0451 \u043c\u0438\u0440\u043e\u0432\u043e\u0437\u0437\u0440\u0435\u043d\u0438\u0435 \u043d\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 <code>iOS<\/code> \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, \u044d\u0442\u043e\u0442 \u0421\u0442\u044d\u043d\u0444\u043e\u0440\u0434\u0441\u043a\u0438\u0439 \u043a\u0443\u0440\u0441 \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u00ab\u0441\u043d\u043e\u0441\u0438\u0442 \u0433\u043e\u043b\u043e\u0432\u0443\u00bb \u0438 \u044d\u0442\u043e \u0437\u0434\u043e\u0440\u043e\u0432\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432\u044b \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 \u041c\u0438\u0440. \u0414\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0432\u044b \u0432 \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0435 \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u0442\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 SwiftUI \u2014 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u044d\u0442\u043e\u0442 \u043a\u0443\u0440\u0441, \u0442\u0430\u043c \u043a\u0443\u0447\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u0438\u0434\u0435\u0439 \u0438 \u044d\u0442\u043e \u0431\u0443\u0434\u0443\u0449\u0435\u0435.<\/p>\n<p>  \u0414\u0430, <code>SwiftUI<\/code> \u0438\u043c\u0435\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0444\u0430\u043d\u0442\u0430\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0439 \u0438 \u043e\u0447\u0435\u043d\u044c \u043a\u0440\u0443\u0442\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f <code>UI<\/code>, \u043d\u043e \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445<code> iOS<\/code> \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0444\u0443\u043d\u0434\u0430\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043e\u0441\u043d\u043e\u0432\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f <code>SwiftUI<\/code> \u0441\u0432\u044f\u0437\u0430\u043d\u044b \u0441 \u043f\u043e\u0442\u043e\u043a\u043e\u043c \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u0435\u0436\u0434\u0443 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c\u0438 <code><font color=\"#680ea1\">Views<\/font><\/code>, \u043c\u0435\u0436\u0434\u0443 <code><font color=\"#680ea1\">View<\/font><\/code> \u0438 Model, \u043c\u0435\u0436\u0434\u0443 <code><font color=\"#680ea1\">View<\/font><\/code> \u0438 \u00ab\u0432\u043d\u0435\u0448\u043d\u0438\u043c \u041c\u0438\u0440\u043e\u043c\u00bb (\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c \u0438\u043b\u0438 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u043e\u043c). \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u043e\u0440 \u0432 \u0441\u0432\u043e\u0435\u043c \u043a\u0443\u0440\u0441\u0435 \u0443\u0434\u0435\u043b\u044f\u0435\u0442 \u043e\u0441\u043e\u0431\u043e\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u0438\u043c\u0435\u043d\u043d\u043e \u00ab\u043f\u043e\u0442\u043e\u043a\u0443 \u0434\u0430\u043d\u043d\u044b\u0445\u00bb \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u0445, \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0445 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 <code>SwiftUI<\/code>, \u0438 \u0443\u0436\u0435 \u043d\u0430 \u041b\u0435\u043a\u0446\u0438\u0438 2 \u043c\u044b \u043e\u0431\u0441\u0443\u0436\u0434\u0430\u0435\u043c <code>MVVM<\/code>.<\/p>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u044f \u043f\u0440\u0438\u0432\u0435\u0434\u0443 \u043b\u0438\u0448\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043a\u0443\u0441\u043e\u043a \u0438\u0437 \u043b\u0435\u043a\u0446\u0438\u0439 2 \u0438 3 \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u043e\u0440\u0430 \u041f\u043e\u043b\u0430 \u0425\u044d\u0433\u0435\u0440\u0442\u0438, \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u044e\u0449\u0438\u0439 \u0440\u0435\u0430\u043a\u0442\u0438\u0432\u043d\u0443\u044e \u043f\u0440\u0438\u0440\u043e\u0434\u0443 <code>SwiftUI<\/code> \u0438 <code>MVVM<\/code>, \u0447\u0442\u043e\u0431\u044b \u0432\u044b \u043f\u043e\u043d\u0438\u043c\u0430\u043b\u0438, \u043d\u0430 \u043a\u0430\u043a\u043e\u043c \u0443\u0440\u043e\u0432\u043d\u0435 \u0438\u0434\u0435\u0442 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435 \u0432 \u044d\u0442\u043e\u043c \u043a\u0443\u0440\u0441\u0435. <\/p>\n<p>  \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0430\u044f \u0432 <code>SwiftUI<\/code> \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f<code> UI<\/code> \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <code>Reactive<\/code>. \u041e\u043d\u0430 \u0438\u043c\u0435\u0435\u0442 \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0442\u0438\u0432\u043d\u0443\u044e \u043f\u0440\u0438\u0440\u043e\u0434\u0443 \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u0438\u043c\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0430\u0441\u044c \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f <code>UI<\/code> \u2014 <code>UIKIt<\/code>.<\/p>\n<p>  <code><font color=\"#680ea1\">View<\/font><\/code> \u0432<code> SwiftUI <\/code>\u0438\u043c\u0435\u0435\u0442 \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440, \u0442\u043e \u0435\u0441\u0442\u044c \u0432\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u0435\u043a\u043b\u0430\u0440\u0438\u0440\u0443\u0435\u0442\u0435, \u043a\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0432\u0430\u0448 <code><font color=\"#680ea1\">View<\/font><\/code>, \u0438 \u0447\u0442\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435, \u0435\u0441\u043b\u0438 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u0441\u044f <code>Model<\/code> \u0438\u043b\u0438 \u00ab\u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u041c\u0438\u0440\u00bb. <code><font color=\"#680ea1\">View<\/font><\/code> \u0432 <code>SwiftUI<\/code> \u0432\u043e\u0441\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u044d\u0442\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0447\u0435\u0440\u0435\u0437 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u00ab\u0440\u0435\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0435\u00bb \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 <code><font color=\"#680ea1\">@State<\/font><\/code>, <code><font color=\"#680ea1\">@Binding<\/font><\/code>, <code><font color=\"#680ea1\">@StateObject<\/font><\/code>, <code><font color=\"#680ea1\">@ObservedObject<\/font><\/code>, <code><font color=\"#680ea1\">@EnvironmentObject<\/font><\/code>. \u0412 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 <code>UIKIt<\/code>, \u0432 <code>SwiftUI<\/code> <code><font color=\"#680ea1\">View<\/font><\/code> \u043d\u0435\u0442 \u043d\u0438 \u0434\u0435\u043b\u0435\u0433\u0430\u0442\u0430 <font color=\"#680ea1\">delegate<\/font>, \u043d\u0438 <font color=\"#680ea1\">data source<\/font>, \u043d\u0438 \u043a\u0430\u043a\u0438\u0445-\u0442\u043e \u0434\u0440\u0443\u0433\u0438\u0445 \u00ab\u043f\u0430\u0442\u0442\u0435\u0440\u043d\u043e\u0432\u00bb \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u043c <font color=\"#680ea1\">UIView<\/font>. \u0412 <code>SwiftUI<\/code> <font color=\"#680ea1\">View<\/font> \u043c\u043e\u0433\u0443\u0442 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0435 \u0432\u044b\u0448\u0435 Property Wrapper (\u00ab\u041e\u0431\u0435\u0440\u0442\u043a\u0438 \u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430\u00bb), \u043c\u0430\u0440\u043a\u0438\u0440\u0443\u0435\u043c\u044b\u0435 \u0437\u043d\u0430\u043a\u043e\u043c <font color=\"#680ea1\">@<\/font>, \u043e\u043d\u0438 \u00ab\u0443\u043b\u0430\u0432\u043b\u0438\u0432\u0430\u044e\u0442\u00bb \u043d\u0443\u0436\u043d\u044b\u0435 \u0438\u043c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0438 \u00ab\u043f\u0435\u0440\u0435\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u044e\u0442\u00bb \u044d\u0442\u043e\u0442 <font color=\"#680ea1\">View<\/font>. <\/p>\n<p>  \u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0438\u0441\u0445\u043e\u0434\u044f\u0442 \u043e\u0442<code> ViewModel<\/code>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u0442\u0430\u0432\u0438\u0442\u0441\u044f \u043c\u0435\u0436\u0434\u0443 <code>Model<\/code> \u0438 <font color=\"#680ea1\">View<\/font> \u0438\u043b\u0438 \u043c\u0435\u0436\u0434\u0443 \u00ab\u0432\u043d\u0435\u0448\u043d\u0438\u043c \u041c\u0438\u0440\u043e\u043c\u00bb (\u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u043e\u043c) \u0438 <font color=\"#680ea1\">View<\/font>. \u0418\u043c\u0435\u043d\u043d\u043e \u043e\u043d\u0430 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u0443\u0435\u0442 \u0432\u0441\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f <code>Model<\/code> \u0438\u043b\u0438 \u00ab\u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u041c\u0438\u0440\u0430\u00bb \u0434\u043b\u044f <font color=\"#680ea1\">View<\/font> \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0442\u043e\u0442 \u0441\u0430\u043c\u044b\u0439 \u00ab\u0440\u0435\u0430\u043a\u0442\u0438\u0432\u044b\u0439\u00bb \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u043c\u0443 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044e <font color=\"#680ea1\">View<\/font> \u043f\u0440\u0438 \u043b\u044e\u0431\u044b\u0445 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f\u0445.<br \/>  <code>ViewModel<\/code> \u041d\u0418\u041a\u041e\u0413\u0414\u0410 \u043d\u0435 \u00ab\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u00bb \u0441 <font color=\"#680ea1\">View<\/font> \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e. \u041a\u043e\u0433\u0434\u0430 \u0447\u0442\u043e-\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u043e\u0441\u044c \u0432 <code>Model<\/code> \u0438\u043b\u0438 \u0432\u043e \u0432\u043d\u0435\u0448\u043d\u0435\u043c \u041c\u0438\u0440\u0435, <code>ViewModel<\/code> \u043f\u0443\u0431\u043b\u0438\u043a\u0443\u0435\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435: \u201c\u0427\u0442\u043e-\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u043e\u0441\u044c&#8230;\u201d \u0410 <font color=\"#680ea1\">View<\/font> \u201c\u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f\u201d \u043d\u0430 \u044d\u0442\u0443 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u044e, \u0438 \u0435\u0441\u043b\u0438 <font color=\"#680ea1\">View<\/font> \u0432\u0438\u0434\u0438\u0442, \u0447\u0442\u043e \u201c\u0427\u0442\u043e-\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u043e\u0441\u044c&#8230;\u201d, \u0442\u043e \u043e\u0431\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043a <code>ViewModel<\/code> \u0438 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442: \u201c\u041a\u0430\u043a\u043e\u0435 \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 (<i>state<\/i>) \u0432 \u044d\u0442\u043e\u043c \u041c\u0438\u0440\u0435? \u042f \u0441\u043e\u0431\u0438\u0440\u0430\u044e\u0441\u044c \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0441\u0435\u0431\u044f \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u044d\u0442\u0438\u043c \u0442\u0435\u043a\u0443\u0449\u0438\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u043c!\u201d<br \/>  \u0423 <code>ViewModel<\/code> \u0435\u0441\u0442\u044c \u0441\u0432\u043e\u0439 \u0430\u0440\u0441\u0435\u043d\u0430\u043b \u00ab\u0440\u0435\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438\u00bb \u2014 \u043e\u0431\u044a\u0435\u043a\u0442\u044b, \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0449\u0438\u0435 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b <font color=\"#680ea1\">ObservableObject<\/font>\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u044b\u0435 \u043f\u043e\u0441\u044b\u043b\u0430\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 <font color=\"#680ea1\">objectWillChange<\/font>, <font color=\"#680ea1\">@Published<\/font> \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435, \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 <font color=\"#680ea1\">.environment<\/font>. \u0427\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e <code>ViewModel<\/code> \u2014 \u044d\u0442\u043e \u043a\u043b\u0430\u0441\u0441 class, \u0442\u0430\u043a \u043a\u0430\u043a \u0443\u0441\u043b\u0443\u0433\u0430\u043c\u0438 <code>ViewModel<\/code> \u0445\u043e\u0442\u044f\u0442 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e <font color=\"#680ea1\">Views<\/font>.<\/p>\n<p>  \u0422\u0430\u043a \u0447\u0442\u043e \u0432\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432 <code>SwiftUI<\/code> \u0431\u0435\u0437 <code>MVVM<\/code>. <br \/>  <code>MVVM<\/code> \u2014 \u044d\u0442\u043e \u0446\u0435\u043b\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430. \u041d\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0438 \u043d\u0435\u0447\u0442\u043e \u0434\u0440\u0443\u0433\u043e\u0435, \u0442\u0430\u043a\u0436\u0435 \u043e\u0442\u043d\u043e\u0441\u044f\u0449\u0435\u0435\u0441\u044f \u043a \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0438 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u044d\u0442\u043e \u00ab\u043d\u0435\u0447\u0442\u043e\u00bb <code>Model<\/code>&#8212;<code>View<\/code>&#8212;<code>Intent<\/code> (\u041c\u043e\u0434\u0435\u043b\u044c \u2014 \u0418\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u2014 \u041d\u0430\u043c\u0435\u0440\u0435\u043d\u0438\u0435 \u2014 MVI). \u0427\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u043d\u044f\u0442\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043a\u043e\u0433\u0434\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0447\u0442\u043e-\u0442\u043e \u0445\u043e\u0447\u0435\u0442 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0438 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u0447\u0435\u0440\u0435\u0437 \u044d\u0442\u043e \u201c\u043d\u0430\u043c\u0435\u0440\u0435\u043d\u0438\u0435\u201d.<\/p>\n<p>  \u0412 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0434\u0438\u0437\u0430\u0439\u043d \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<code> UI<\/code> \u0434\u043b\u044f<code> iOS<\/code> \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430 <code>SwiftUI<\/code> \u043d\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 <code>Intent<\/code> \u0441\u0438\u0441\u0442\u0435\u043c\u0443, \u0442\u0430\u043a \u0447\u0442\u043e \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u043e\u0440 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043e\u0431 <code>Intent<\/code> \u0441\u0438\u0441\u0442\u0435\u043c\u0435, \u043a\u0430\u043a \u043e \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u0438.<br \/>  <code>Intent<\/code> \u2014 \u044d\u0442\u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u201c\u043d\u0430\u043c\u0435\u0440\u0435\u043d\u0438\u0435\u201d \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f.<\/p>\n<p>  \u041a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u043c \u201c\u043d\u0430\u043c\u0435\u0440\u0435\u043d\u0438\u044f\u201d<code> Intent <\/code>\u0432 \u043d\u0430\u0448\u0435\u0439 \u043a\u0430\u0440\u0442\u043e\u0447\u043d\u043e\u0439 \u0438\u0433\u0440\u0435 \u043d\u0430 \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u043d\u0438\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u201c\u043d\u0430\u043c\u0435\u0440\u0435\u043d\u0438\u0435\u201d \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043a\u0430\u0440\u0442\u0443. \u042d\u0442\u043e \u0438 \u0435\u0441\u0442\u044c \u201c\u043d\u0430\u043c\u0435\u0440\u0435\u043d\u0438\u0435\u201d <code>Intent<\/code>. \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u044d\u0442\u0438\u0445 \u201c\u043d\u0430\u043c\u0435\u0440\u0435\u043d\u0438\u0439\u201d <code>Intent <\/code>\u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0438\u0435 <code>ViewModel<\/code>.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/ij\/hw\/bh\/ijhwbhidbulutxrd8y1rmf3x8fm.png\"><\/p>\n<p>  \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0435 \u0442\u0435\u043e\u0440\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u0438 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u0438\u0437\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0432 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445. \u041a\u0430\u0436\u0434\u044b\u0439 \u0441\u0438\u043c\u0432\u043e\u043b \u0438 \u043a\u0430\u0436\u0434\u0430\u044f \u0441\u0442\u0440\u0435\u043b\u043a\u0430 \u043d\u0430 \u044d\u0442\u043e\u043c \u0440\u0438\u0441\u0443\u043d\u043a\u0435 \u0431\u0443\u0434\u0443\u0442 \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u044b \u0438 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u044b \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u043e\u0440\u043e\u043c \u0432 \u043a\u043e\u0434\u0435. <\/p>\n<p>  \u0412 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043a\u0443\u0440\u0441\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u043f\u0435\u0440\u0432\u044b\u0445 10 \u041b\u0435\u043a\u0446\u0438\u0439 \u0434\u043b\u044f \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f, \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u044e\u0442\u0441\u044f 2 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u2014 \u043a\u0430\u0440\u0442\u043e\u0447\u043d\u0430\u044f \u0438\u0433\u0440\u0430 \u043d\u0430 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435 <code>Memorize<\/code> \u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u00ab\u043a\u0430\u0440\u0442\u0438\u043d\u00bb \u043f\u0443\u0442\u0435\u043c \u00ab\u043f\u0435\u0440\u0435\u0442\u044f\u0433\u0438\u0432\u0430\u043d\u0438\u044f\u00bb (<code>Drag<\/code>)\u044d\u043c\u043e\u0434\u0436\u0438 \u0438\u0437 \u0440\u0430\u0437\u043d\u043e\u0433\u043e \u0440\u043e\u0434\u0430 \u043f\u0430\u043b\u0438\u0442\u0440 \u043d\u0430 \u0444\u043e\u043d\u043e\u0432\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 <code>EmojiArt<\/code>. \u0412 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438 \u044d\u0442\u0438 \u0436\u0435 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0431\u044b\u043b\u0438 \u0438 \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043a\u0443\u0440\u0441\u0430<a href=\"https:\/\/itunes.apple.com\/ru\/podcast\/developing-ios-11-apps-with-swift\/id1315130780?l=en&amp;mt=2\" rel=\"nofollow\">\u00a0CS193P \u00abDeveloping \u00a0iOS 11 Apps with Swift\u00bb \u0412\u0435\u0441\u043d\u0430 2017<\/a>. <\/p>\n<p>  \u041d\u043e \u043d\u0438 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u0447\u043a\u0438 \u043a\u043e\u0434\u0430 \u0438\u0437 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u043a\u0443\u0440\u0441\u0430 \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u043e\u0440 \u043d\u0435 \u0437\u0430\u0438\u043c\u0441\u0442\u0432\u0443\u0435\u0442, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043d\u0430 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043d\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 (<code>\u041e\u041e\u041f<\/code>) \u043a\u0430\u043a \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c \u043a\u0443\u0440\u0441\u0435, \u0430 \u0424\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 (<code>\u0424\u041f<\/code>) \u0438\u043b\u0438 \u041f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u2014 \u041e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 (<code>\u041f\u041e\u041f<\/code>). <\/p>\n<p>  \u0412 \u041f\u041e\u041f \u0432\u043c\u0435\u0441\u0442\u043e <font color=\"#c3178D\">superclass<\/font>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u041e\u041e\u041f, \u0432\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b <font color=\"#c3178D\">protocol<\/font> \u0434\u043b\u044f \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u00ab\u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f\u00bb \u043e\u0431\u044a\u0435\u043a\u0442\u0430, \u0432\u043c\u0435\u0441\u0442\u043e \u043a\u043b\u0430\u0441\u0441\u043e\u0432 <font color=\"#c3178D\">class<\/font> (Reference Type) \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b <font color=\"#c3178D\">struct<\/font> \u0438 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f <font color=\"#c3178D\">enum<\/font> (Value Type), \u0430 \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e\u043b\u0438\u043c\u043e\u0440\u0444\u0438\u0437\u043c\u0430 \u0431\u0435\u0437 \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u0438 Reference \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0438 \u2014 <code>Generic<\/code> \u0438\u043b\u0438 \u00ab\u041d\u0435 \u0432\u0430\u0436\u043d\u043e, \u043a\u0430\u043a\u0438\u0435\u00bb \u0422\u0418\u041f\u044b, \u043a\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0438\u0445 \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u043e\u0440 \u0432 \u0441\u0432\u043e\u0438\u0445 \u043b\u0435\u043a\u0446\u0438\u044f\u0445, \u0445\u043e\u0442\u044f \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0435 \u043e\u0431\u0449\u0435\u043f\u0440\u0438\u043d\u044f\u0442\u043e\u0435 \u0438\u043c\u044f \u0442\u0430\u043a\u043e\u0433\u043e \u0422\u0418\u041f\u0430 \u2014 \u044d\u0442\u043e \u041f\u0410\u0420\u0410\u041c\u0415\u0422\u0420 \u0422\u0418\u041f\u0410 (type parameter). \u0421\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u0435 <font color=\"#c3178D\">protocol<\/font> + Generic \u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0441\u043d\u043e\u0432\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432 Swift. \u0414\u043b\u044f \u0441\u0432\u043e\u0438\u0445 \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u043e\u0432 \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u043e\u0440 \u041f\u043e\u043b \u0425\u044d\u0433\u0435\u0440\u0442\u0438 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u044d\u0442\u043e\u0442 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c <code>Constraints and Gains <\/code>(\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0438 \u0412\u044b\u0433\u043e\u0434\u044b), \u043a\u043e\u0433\u0434\u0430 \u0432\u044b \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u0442\u0435 <code>Generic<\/code> \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 <font color=\"#c3178D\">struct<\/font>, \u0430 \u0437\u0430\u0442\u0435\u043c \u0437\u0430\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0435 \u0435\u0451 \u0434\u0435\u043b\u0430\u0442\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u0432\u0435\u0449\u0438 \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0443 <font color=\"#c3178D\">protocol<\/font>, \u0430, \u043f\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443, \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0435, \u043d\u043e \u0432\u0437\u0430\u043c\u0435\u043d \u043e\u043d\u0430 \u043f\u0440\u0438\u043e\u0431\u0440\u0435\u0442\u0430\u0435\u0442 \u043d\u043e\u0432\u044b\u0435 \u00ab\u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0447\u0435\u0441\u043a\u0438\u0435\u00bb \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438. \u041f\u0440\u043e\u0444\u0435\u0441\u0441\u043e\u0440\u0443 \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f \u0440\u0438\u0444\u043c\u0430 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f <code>Constraints and Gains <\/code>(\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0438 \u0412\u044b\u0433\u043e\u0434\u044b), \u043d\u043e \u0438 \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u044d\u0442\u043e \u0442\u0430\u043a \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442.<\/p>\n<p>  \u0412\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430 <code>Constraints and Gains <\/code>(\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0438 \u0412\u044b\u0433\u043e\u0434\u044b) \u0434\u043b\u044f <code>Model<\/code> \u043a\u0430\u0440\u0442\u043e\u0447\u043d\u043e\u0439 \u0438\u0433\u0440\u044b \u043d\u0430 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435 <code>Memorize<\/code>:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/nm\/hb\/jy\/nmhbjywgwhtdpxeornstod26lr0.png\"><\/p>\n<p>  \u041d\u0430 \u043f\u0440\u043e\u0442\u044f\u0436\u0435\u043d\u0438\u0438 \u0432\u0441\u0435\u0433\u043e \u043a\u0443\u0440\u0441\u0430, \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u041b\u0435\u043a\u0446\u0438\u0438 2 \u0438 \u0433\u0434\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u043e\u0436\u043d\u043e, \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u043e\u0440 \u0431\u0443\u0434\u0435\u0442 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445 \u044d\u0442\u043e\u0442 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c <code>Constraints and Gains<\/code> (\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0438 \u0412\u044b\u0433\u043e\u0434\u044b). \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0441\u0432\u043e\u0435\u0439 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u201c\u0441\u0435\u0442\u043a\u0438\u201d <font color=\"#680ea1\">Grid<\/font>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u0442 \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 <font color=\"#680ea1\">ForEach<\/font> \u0432 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0435\u0439 \u0441 2D <font color=\"#680ea1\">HStack<\/font> \u0434\u043b\u044f \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e <font color=\"#680ea1\">View<\/font> \u0432 \u043d\u0443\u0436\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u0435, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c\u044b\u043c \u0441\u0442\u0440\u043e\u043a\u043e\u0439 \u0438 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u043c:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/xs\/pr\/hh\/xsprhh24s3aswpwz1n-so7d9bqi.png\"><\/p>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u041f\u043e\u043b \u0425\u044d\u0433\u0435\u0440\u0442\u0438 \u043f\u043e\u0441\u0432\u044f\u0449\u0430\u0435\u0442 \u0440\u044f\u0434 \u041b\u0435\u043a\u0446\u0438\u0439 \u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0432 \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u043c \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0438 <font color=\"#680ea1\">View<\/font> \u0432 <code>SwiftUI<\/code>, \u0442\u043e \u0435\u0441\u0442\u044c \u0441\u0432\u043e\u0435\u043e\u0431\u0440\u0430\u0437\u043d\u043e\u043c\u0443 <code>SwiftUI DSL<\/code> (<i>domain-specific language<\/i>).<\/p>\n<p>  \u041f\u0440\u0435\u0436\u0434\u0435 \u0432\u0441\u0435\u0433\u043e \u044d\u0442\u043e:<\/p>\n<ul>\n<li> \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044f (\u044f\u0432\u043d\u0430\u044f \u0438 \u043d\u0435\u044f\u0432\u043d\u0430\u044f, \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b <font color=\"#680ea1\">Animatable<\/font><\/li>\n<\/ul>\n<p>, \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 <font color=\"#680ea1\">AnimatableModifier <\/font>),<br \/>    \u044d\u043b\u0435\u0433\u0430\u043d\u0442\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 <code>Layout<\/code>,<br \/>    <font color=\"#680ea1\">Shape<\/font>,<br \/>    \u0436\u0435\u0441\u0442\u044b (<font color=\"#680ea1\">@GestureState<\/font>),<br \/>    <font color=\"#680ea1\">ViewModifier<\/font><br \/>    <font color=\"#680ea1\">@ViewBuilder<\/font><br \/>    \u043c\u043e\u0434\u0430\u043b\u044c\u043d\u044b\u0435 <font color=\"#680ea1\">Views<\/font> <font color=\"#680ea1\">.sheet<\/font>, <font color=\"#680ea1\">.popover<\/font>,<br \/>    \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044e <font color=\"#680ea1\">NavigationView<\/font>, <font color=\"#680ea1\">NavigationLink<\/font><\/p>\n<p>  \u041e\u0441\u043e\u0431\u043e\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u0438 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0443\u0441\u0438\u043b\u0438\u044f \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u044b, \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435, \u043d\u0430 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044e, \u0442\u0430\u043c \u043c\u043d\u043e\u0433\u043e \u0432\u0441\u0435\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0433\u043e, \u043d\u043e \u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u043e \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u00ab\u043f\u0435\u0440\u0435\u0445\u043e\u0434\u044b\u00bb <font color=\"#680ea1\">Transition <\/font>, \u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u0430\u043b\u043e \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0438 \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 Apple, \u0438 \u0432 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0435, \u043d\u043e \u041f\u043e\u043b\u0443 \u0425\u044d\u0433\u0435\u0440\u0442\u0438 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0435\u043c\u0443 \u043d\u0443\u0436\u043d\u043e \u00ab\u043a\u0440\u0430\u0441\u0438\u0432\u043e\u00bb \u00ab\u043f\u0435\u0440\u0435\u0432\u0435\u0440\u043d\u0443\u0442\u044c\u00bb \u043a\u0430\u0440\u0442\u0443 \u0432 \u043a\u0430\u0440\u0442\u043e\u0447\u043d\u043e\u0439 \u0438\u0433\u0440\u0435 \u043d\u0430 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435 <code>Memorize<\/code>. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e \u0442\u0430\u043c \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u00ab\u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0442\u0438 \u0432 \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0435\u0435 \u0432\u0440\u0435\u043c\u044f\u00bb, \u0445\u043e\u0442\u044f \u0432\u0441\u0435 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438 \u043e\u0442\u0440\u0430\u0436\u0430\u044e\u0442 \u0442\u043e, \u0447\u0442\u043e \u0443\u0436\u0435 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e. \u042f \u0434\u043e \u043a\u043e\u043d\u0446\u0430 \u0435\u0449\u0451 \u043d\u0435 \u0440\u0430\u0437\u0433\u0430\u0434\u0430\u043b\u0430 \u044d\u0442\u0443 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044e, \u043d\u043e \u044d\u0442\u043e \u2014 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043a\u0440\u0443\u0442\u043e.<\/p>\n<p>  \u0421\u0430\u043c\u043e\u0439 \u0432\u0430\u0436\u043d\u043e\u0439 \u0434\u043b\u044f \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u0440\u0435\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0440\u0438\u0440\u043e\u0434\u044b <code>SwiftUI <\/code> \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u041b\u0435\u043a\u0446\u0438\u044f 9 \u00abData Flow\u00bb, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u041f\u043e\u043b \u0425\u044d\u0433\u0435\u0440\u0442\u0438 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442 \u00ab\u0440\u0435\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0435\u00bb <code>Property Wrapper <\/code>(\u00ab\u041e\u0431\u0435\u0440\u0442\u043a\u0438 \u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430\u00bb) <font color=\"#680ea1\">@Published<\/font>, <font color=\"#680ea1\"><a href=\"https:\/\/habr.com\/ru\/users\/state\/\" class=\"user_link\">State<\/a><\/font>, <font color=\"#680ea1\">@Binding<\/font>, <font color=\"#680ea1\"><a href=\"https:\/\/habr.com\/ru\/users\/state\/\" class=\"user_link\">State<\/a>Object<\/font>, <font color=\"#680ea1\">@ObservedObject<\/font>, <font color=\"#680ea1\">@EnvironmentObject<\/font>. \u0412\u044b \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430 <code>SwiftUI<\/code>, \u0435\u0441\u043b\u0438 \u043d\u0435 \u043f\u043e\u0439\u043c\u0435\u0442\u0435 \u0438\u0445 \u0441\u043c\u044b\u0441\u043b, \u0438\u0445 \u043d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0443\u044e \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0438 \u0442.\u0434. <\/p>\n<p>  \u0415\u0449\u0451 \u043e\u0434\u043d\u0430 \u043f\u0440\u0438\u044f\u0442\u043d\u0430\u044f \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u044d\u0442\u043e\u0433\u043e \u043a\u0443\u0440\u0441\u0430 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441 \u0431\u043e\u043b\u0435\u0435 \u0440\u0430\u043d\u043d\u0438\u043c\u0438 \u0432\u0435\u0440\u0441\u0438\u044f\u043c\u0438 \u043a\u0443\u0440\u0441\u0430 CS193P \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u043e\u0440 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043e \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043e\u0434\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f (<i>persistence<\/i>), \u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0432 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0438 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0441\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f (<i>persistence<\/i>) \u0432 <code>iOS<\/code>:<\/p>\n<p>  <u><font color=\"#680ea1\">UserDefaults<\/font><\/u>. \u041f\u0440\u043e\u0444\u0435\u0441\u0441\u043e\u0440 \u0430\u0434\u0430\u043f\u0442\u0438\u0440\u043e\u0432\u0430\u043b \u0434\u0440\u0435\u0432\u043d\u0438\u0439 <font color=\"#680ea1\">UserDefaults<\/font> \u043a \u00ab\u0440\u0435\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438\u00bb \u0432 \u043f\u043b\u0430\u043d\u0435 \u0430\u0432\u0442\u043e\u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f.<br \/>  <u><font color=\"#680ea1\">DocumentGroup<\/font><\/u> (<font color=\"#680ea1\">UIDocument<\/font> \u0430\u043d\u0430\u043b\u043e\u0433). \u0418\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u0443\u0435\u0442 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435<code> Files <\/code>\u0438 \u0434\u0430\u043d\u043d\u044b\u0435, \u0432\u043e\u0441\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u043c\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c \u043a\u0430\u043a \u00ab\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u044b\u201d \u0432 \u0432\u0430\u0448\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435. \u041f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u0432<code> iOS 14 <\/code>\u0432 <code>SwiftUI 2.0<\/code>.<br \/>  <u><code>Core Data<\/code>.\u00a0<\/u>\u041c\u043e\u0449\u043d\u0430\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0431\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445. \u042d\u043b\u0435\u0433\u0430\u043d\u0442\u043d\u0430\u044f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0441\u043e <code>SwiftUI<\/code>.<br \/>  <u>Cloud Kit. <\/u>\u0411\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445, \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0439 \u0432 \u201e\u043e\u0431\u043b\u0430\u043a\u0435\u201c (\u0442\u043e \u0435\u0441\u0442\u044c \u0432 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0435), \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0430\u044f \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e. \u0421\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043d\u0430 \u043b\u044e\u0431\u044b\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. <br \/>  <u><font color=\"#680ea1\">UFileManager\/URL\/Data<\/font><\/u>.\u00a0\u0417\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 <code>iOS<\/code>.<\/p>\n<p>  \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0443\u0441\u043b\u043e\u0432\u043d\u043e \u0432\u0435\u0441\u044c <code>\u0421\u0442\u044d\u043d\u0444\u043e\u0440\u0434\u0441\u043a\u0438\u0439 \u043a\u0443\u0440\u0441 CS193P<\/code> \u0432 \u044d\u0442\u043e\u043c \u0433\u043e\u0434\u0443 \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u043d\u0430 \u0434\u0432\u0435 \u0447\u0430\u0441\u0442\u0438: \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0434\u043b\u044f \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f \u0447\u0430\u0441\u0442\u044c (\u041b\u0435\u043a\u0446\u0438\u0438 1-10) \u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e (\u041b\u0435\u043a\u0446\u0438\u0438 11-14), \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 4-\u0445 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u041b\u0435\u043a\u0446\u0438\u0439, \u043f\u0440\u0438\u0437\u0432\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u0430\u043c\u0438 \u0441\u0432\u043e\u0438\u0445 \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432. \u0412 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u044b:<\/p>\n<p>  \u041b\u0435\u043a\u0446\u0438\u044f 11 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442 \u0442\u0430\u043a\u0443\u044e \u0432\u0430\u0436\u043d\u0443\u044e \u0442\u0435\u043c\u0443 \u043a\u0430\u043a <font color=\"#680ea1\">Picker<\/font> (\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e \u0432\u044b\u0431\u043e\u0440\u0430). <br \/>  \u041b\u0435\u043a\u0446\u0438\u044f 12 \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u0430 <code>Core Data<\/code>.<br \/>  \u041b\u0435\u043a\u0446\u0438\u044f 13 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043e\u0431\u0437\u043e\u0440 \u0432\u0441\u0435\u0445 \u0441\u0438\u0441\u0442\u0435\u043c \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f (<code>Persistence<\/code>) \u043d\u0430 <code>iOS<\/code>, \u0442\u0430\u043c \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b <code>iOS<\/code>.<br \/>  \u041b\u0435\u043a\u0446\u0438\u044f 14 \u2014 \u0438\u043d\u0442\u0435\u0440\u043d\u0430\u0446\u0438\u044f<code> UIKit <\/code>\u0432<code> SwiftUI<\/code>.<\/p>\n<p>  \u041b\u0435\u043a\u0446\u0438\u0438 11 \u0438 12 \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u043d\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043f\u043e\u0434 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c <code>Enroute<\/code>. \u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 <code>Enroute<\/code>, \u043f\u043e \u0441\u0443\u0442\u0438, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 <code>API<\/code>, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u0432 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0435 \u043e\u0442 \u0442\u0440\u0435\u043a\u0435\u0440\u0430 \u0440\u0435\u0439\u0441\u043e\u0432 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 <a href=\"https:\/\/ru.flightaware.com\/\" rel=\"nofollow\">FlightAware<\/a>, \u0438 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u0438\u0434\u0435\u0442\u044c \u043d\u0430 \u0441\u0432\u043e\u0435\u043c UI \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0440\u0435\u0439\u0441\u0430\u0445, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c\u044b\u0445 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u043c, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0437\u0430\u0434\u0430\u0435\u0442\u0441\u044f \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442 \u043f\u0440\u0438\u0431\u044b\u0442\u0438\u044f <font color=\"#680ea1\">destination<\/font>, \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f <font color=\"#680ea1\">origin<\/font>, \u0430\u0432\u0438\u0430\u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f <font color=\"#680ea1\">airline<\/font> \u0438 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u043b\u0438 \u0440\u0435\u0439\u0441\u044b \u0443\u0436\u0435 \u0432 \u0432\u043e\u0437\u0434\u0443\u0445\u0435 \u0438\u043b\u0438 \u0435\u0449\u0435 \u043e\u0436\u0438\u0434\u0430\u044e\u0442 \u0432\u044b\u043b\u0435\u0442\u0430 \u043d\u0430 \u0437\u0435\u043c\u043b\u0435 <font color=\"#680ea1\">inTheAir<\/font>. <\/p>\n<p>  \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0432\u043f\u0435\u0447\u0430\u0442\u043b\u0438\u043b\u0430 \u041b\u0435\u043a\u0446\u0438\u044f 12, \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u043d\u0430\u044f <code>Core Data<\/code>, \u043a\u0443\u0434\u0430 \u043c\u044b \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0440\u0435\u0439\u0441\u0430\u0445 <font color=\"#680ea1\">Flight<\/font>, \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442\u0430\u0445 <font color=\"#680ea1\">Airport<\/font> \u0438 \u0430\u0432\u0438\u0430\u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f\u0445 <font color=\"#680ea1\">Airline<\/font>\u00a0\u0441 \u0442\u0440\u0435\u043a\u0435\u0440\u0430 \u043f\u043e\u043b\u0435\u0442\u043e\u0432 <a href=\"https:\/\/ru.flightaware.com\/\" rel=\"nofollow\">FlightAware<\/a>, \u0430 \u0437\u0430\u0442\u0435\u043c \u0432\u044b\u0432\u043e\u0434\u0438\u043c \u0435\u0451 \u043d\u0430 \u043d\u0430\u0448 <code>UI<\/code>. <br \/>  Core Data \u043f\u0440\u0435\u0432\u043e\u0441\u0445\u043e\u0434\u043d\u043e \u043d\u0430\u0443\u0447\u0438\u043b\u0430\u0441\u044c \u201e\u0438\u0433\u0440\u0430\u0442\u044c\u201c \u043d\u0430 \u043f\u043e\u043b\u0435 \u201e\u0440\u0435\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438\u201c <code>SwiftUI<\/code>. <\/p>\n<p>  \u0415\u0441\u0442\u044c \u0434\u0432\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0442\u043e\u0447\u043a\u0438 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438<code> SwiftUI <\/code>\u0441 \u0431\u0430\u0437\u043e\u0439 \u0434\u0430\u043d\u043d\u044b\u0445 <code>Core Data<\/code>.<\/p>\n<p>  \u041e\u0434\u043d\u0430 \u0438\u0437 \u044d\u0442\u0438\u0445 \u0442\u043e\u0447\u0435\u043a \u2014 <font color=\"#680ea1\">@ObservedObject<\/font>.\u00a0\u041e\u0431\u044a\u0435\u043a\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0432 \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445, \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f\u00a0<font color=\"#680ea1\">@ObservableObject<\/font>. \u041f\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443, \u044d\u0442\u043e \u043c\u0438\u043d\u0438\u0430\u0442\u044e\u0440\u043d\u044b\u0435 <code>ViewModel<\/code>,\u00a0 \u043a\u043e\u0442\u043e\u0440\u044b\u0435\u00a0\u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u00a0\u0434\u043b\u044f \u0438\u043d\u0434\u0438\u0432\u0438\u0434\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432\u00a0\u043d\u0430\u043f\u043e\u0434\u043e\u0431\u0438\u0435\u00a0<font color=\"#680ea1\">Flight<\/font>, <font color=\"#680ea1\">Airline<\/font>\u00a0\u043d\u0430 \u0441\u043b\u0443\u0447\u0430\u0439, \u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0438\u0441\u044c, \u0442\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u043f\u043e\u0441\u044b\u043b\u0430\u0435\u043c <font color=\"#680ea1\">objectWillChange.send()<\/font> \u043f\u0440\u0438 \u0438\u0445 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438.\u00a0 \u041d\u043e <code>iOS 14<\/code> \u0438 <code>SwiftUI 2.0 <\/code>\u043f\u043e\u0448\u043b\u0438 \u0435\u0449\u0451 \u0434\u0430\u043b\u044c\u0448\u0435 \u2014 \u043e\u043d\u0438 \u0441\u0434\u0435\u043b\u0430\u043b\u0438\u00a0\u043e\u0431\u044a\u0435\u043a\u0442\u044b <code>Core Data<\/code>\u00a0<font color=\"#680ea1\">Identifiable<\/font>, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u0431\u0435\u0437 \u043a\u0430\u043a\u0438\u0445-\u043b\u0438\u0431\u043e \u0437\u0430\u0442\u0440\u0443\u0434\u043d\u0435\u043d\u0438\u0439 \u0432 \u0442\u0430\u043a\u0438\u0445 <code>SwiftUI<\/code> \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u0445, \u043a\u0430\u043a <font color=\"#680ea1\">ForEcEach<\/font> \u0438 <font color=\"#680ea1\">List<\/font>.<\/p>\n<p>  \u0412\u0442\u043e\u0440\u043e\u0439 \u0442\u043e\u0447\u043a\u043e\u0439 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438\u00a0<code>SwiftUI\u00a0<\/code>\u0438\u00a0<code>Core Data<\/code>\u00a0\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f\u00a0<font color=\"#680ea1\">@FetchRequest<\/font>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0442\u043e, \u0447\u0442\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445, \u044d\u0442\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u201c\u0441\u0435\u0440\u0434\u0446\u0435\u201d \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 <code>SwiftUI <\/code>\u0438 <code>Core Data<\/code>. \u042d\u0442\u043e \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0439 \u201e\u0448\u0435\u0434\u0435\u0432\u0440\u201c, \u0438\u0437\u043e\u0431\u0440\u0435\u0442\u0435\u043d\u043d\u044b\u0439 <code>Apple <\/code>\u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u0432\u043e\u0435\u0439 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0439 \u0431\u0430\u0437\u043e\u0439 \u0434\u0430\u043d\u043d\u044b\u0445 <code>Core Data <\/code>\u0441 \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u043c<code> SwiftUI<\/code>.\u00a0\u042d\u0442\u043e \u041d\u0415 \u043e\u0434\u043d\u043e\u0440\u0430\u0437\u043e\u0432\u0430\u044f \u0432\u044b\u0431\u043e\u0440\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b\u0431\u0440\u0430\u043b \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442. <font color=\"#680ea1\">@FetchRequest<\/font> \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0432\u044b\u0431\u043e\u0440\u043a\u0443,\u00a0\u0442\u0430\u043a \u0447\u0442\u043e \u0432\u0430\u0448 <code>UI<\/code> \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0442\u043e, \u0447\u0442\u043e \u0432 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445, \u0430 \u043e\u043d\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f, \u0442\u0430\u043a \u043a\u0430\u043a \u0441\u0430\u043c\u043e\u043b\u0435\u0442\u044b \u043b\u0435\u0442\u044f\u0442 \u0438 \u0438\u0445 \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u0438\u0431\u044b\u0442\u0438\u044f \u0432 \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432\u0441\u0435 \u0432\u0440\u0435\u043c\u044f \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f.\u00a0<br \/>  \u0412\u0441\u0451 \u044d\u0442\u043e \u0447\u0430\u0441\u0442\u044c \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u201c\u043f\u0440\u0438\u0440\u043e\u0434\u044b\u201d <code>SwiftUI<\/code>.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/-h\/0t\/9q\/-h0t9qxvbnn-rg9k22dsh-jxlji.png\"><\/p>\n<p>  \u041f\u043e \u0445\u043e\u0434\u0443 \u0434\u0435\u043b\u0430 \u041f\u043e\u043b \u0425\u044d\u0433\u0435\u0440\u0442\u0438 \u043f\u0440\u043e\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043b \u043e\u0447\u0435\u043d\u044c \u043a\u043e\u043c\u0444\u043e\u0440\u0442\u043d\u0443\u044e \u0440\u0430\u0431\u043e\u0442\u0443 c\u00a0<code>Core Data<\/code>\u00a0\u0435\u0449\u0451 \u0438 \u0437\u0430 \u0441\u0447\u0435\u0442 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043f\u0440\u0438\u0434\u0430\u043b \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c <code>Core Data\u00a0<\/code>\u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u201e\u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0441\u0430\u0445\u0430\u0440\u0430\u201c \u0432 \u0438\u0445 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0438 <font color=\"#680ea1\">extension<\/font>. \u041d\u0415-<code>Optional<\/code> \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435\u00a0<font color=\"#680ea1\">vars<\/font> \u0441\u0434\u0435\u043b\u0430\u043d\u044b \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c\u044b\u043c\u0438, \u0438 \u201e\u0432\u0437\u0430\u0438\u043c\u043e\u0441\u0432\u044f\u0437\u0438\u201c \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0442\u0438\u043f\u0430 \u201eone to many\u201c (\u00bb\u043e\u0434\u0438\u043d-\u043a\u043e \u043c\u043d\u043e\u0433\u0438\u043c&quot;) \u0438\u043b\u0438 \u00abmany to many\u00bb(\u00ab\u043c\u043d\u043e\u0433\u0438\u0435-\u043a\u043e \u043c\u043d\u043e\u0433\u0438\u043c\u00bb) \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b\u00a0\u0432 \u0432\u0438\u0434\u0435 <code>Swift<\/code> \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432 \u0442\u0438\u043f\u0430 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u0440\u0435\u0439\u0441\u043e\u0432 <font color=\"#680ea1\">Set<\/font>. <\/p>\n<p>  \u041e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043d\u0438\u044f \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0441\u043f\u043e\u0441\u043e\u0431 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f <font color=\"#680ea1\">DocumentGroup<\/font> \u0434\u0430\u043d\u043d\u044b\u0445, \u0432\u043e\u0441\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u043c\u044b\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c\u0438 \u043a\u0430\u043a \u00ab\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u044b\u00bb, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a\u0438\u043c \u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430\u0448\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 <code>EmojiArt<\/code>. \u041f\u0440\u043e\u0444\u0435\u0441\u0441\u043e\u0440 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u043f\u043e\u043a\u043b\u043e\u043d\u043d\u0438\u043a\u043e\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0445 (<a href=\"https:\/\/bestkora.com\/IosDeveloper\/lektsiya-14-cs193p-fall-2017-eshhe-o-documents-demonstratsionnyj-primer-persistence-postoyannoe-hranenie-i-documents\/\" rel=\"nofollow\">Document Based App<\/a>) \u0438\u00a0\u0441\u0438\u043b\u044c\u043d\u043e \u0441\u043e\u0436\u0430\u043b\u0435\u043b \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0432 i<code>OS 13<\/code> \u0432 <code>SwiftUI<\/code> \u043d\u0435 \u0431\u044b\u043b\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 <font color=\"#680ea1\">UIDocument <\/font>.<br \/>  \u0418, \u043e \u0447\u0443\u0434\u043e! \u0412\u00a0<code> iOS 14<\/code> \u0438 <code>SwiftUI 2.0<\/code> \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u00ab\u043e\u0431\u0435\u0440\u0442\u043a\u0430\u00bb\u00a0<font color=\"#680ea1\">UIDocument<\/font>\u00a0\u0432 \u0432\u0438\u0434\u0435\u00a0<font color=\"#680ea1\">DocumentGroup <\/font>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u0430 \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u0442\u044c\u00a0<code>EmojiArt<\/code> \u0432 \u043c\u043d\u043e\u0433\u043e-\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043a\u0430\u043a \u201c\u0440\u043e\u0434\u043d\u043e\u0435\u201d \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432 \u0441\u0440\u0435\u0434\u0435 <code>Files<\/code> \u043a\u0430\u043a \u043d\u0430 <code>iOS<\/code>, \u0442\u0430\u043a \u0438 \u043d\u0430<code> Mac<\/code>. \u0418 \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u043e\u0440 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0432 \u043d\u0430\u0448\u0435 \u0440\u0430\u0441\u043f\u043e\u0440\u044f\u0436\u0435\u043d\u0438\u0435 \u0443\u0436\u0435 \u043f\u043e\u0441\u043b\u0435 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f \u043a\u0443\u0440\u0441\u0430 \u0432\u0435\u043b\u0438\u043a\u043e\u043b\u0435\u043f\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f <a href=\"https:\/\/cs193p.sites.stanford.edu\/wwdc\" rel=\"nofollow\"><code>EmojiArt<\/code><\/a> \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435\u00a0<font color=\"#680ea1\">DocumentGroup <\/font>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432 <code>Xcode 12<\/code>. \u041d\u0430\u0434\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u0432 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0435 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f\u00a0 \u043e \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0438\u00a0<font color=\"#680ea1\">DocumentGroup<\/font>, \u0442\u0430\u043a \u0447\u0442\u043e \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0434\u0430\u0440\u043e\u043a \u0442\u0435\u043c, \u043a\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u00ab\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0445\u00bb.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u044b \u2014 \u0443\u0436\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a <code>iOS<\/code> \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0438 \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u043a\u0443\u0447\u0430 <code>UIKit<\/code> \u043a\u043e\u0434\u0430, \u0442\u043e, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0432\u044b \u0445\u043e\u0442\u0435\u043b\u0438 \u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0435 \u043d\u0430 <code>SwiftUI<\/code>, \u0438 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 <code>API<\/code> \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0432\u0430\u043c \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044e <code>UIKit<\/code> \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0432 <code>SwiftUI<\/code>. \u041e\u0431 \u044d\u0442\u043e\u043c \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0437\u0430\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u041b\u0435\u043a\u0446\u0438\u0438 14. \u0422\u0430\u043c \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0434\u0432\u0430 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u0430. <\/p>\n<p>  \u041e\u0434\u0438\u043d \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u0443\u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u0441\u0442\u0432\u0443\u0435\u0442 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 <code>Enroute<\/code> \u0442\u0430\u043a, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432 \u0444\u0438\u043b\u044c\u0442\u0440\u0435 <font color=\"#680ea1\">FilterFlights<\/font> \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f <font color=\"#680ea1\">destination<\/font> \u043f\u0440\u044f\u043c\u043e \u0441 \u043a\u0430\u0440\u0442\u044b <code>Map<\/code>, <code>UIKit<\/code> \u043a\u0430\u0440\u0442\u044b \u0441 \u0438\u043c\u0435\u043d\u0435\u043c <font color=\"#680ea1\">MKMapView<\/font>. <br \/>  \u0412\u0442\u043e\u0440\u043e\u0439 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 <code>EmojiArt<\/code> \u043a \u0442\u0430\u043a\u0438\u043c \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u043c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0444\u043e\u043d\u043e\u0432\u043e\u0433\u043e \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f, \u043a\u0430\u043a \u201c\u043f\u0435\u0440\u0435\u0442\u044f\u0433\u0438\u0432\u0430\u043d\u0438\u0435\u201d (<i>dragging<\/i>) \u0438\u043b\u0438 \u201c\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 (<i>copy<\/i>) \u0438 \u0432\u0441\u0442\u0430\u0432\u043a\u0430 (<i>paste<\/i>), \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u0441\u043f\u043e\u0441\u043e\u0431 \u2014 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u201c\u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438\u201d \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0441 \u0444\u043e\u0442\u043e\u043a\u0430\u043c\u0435\u0440\u044b (<i>camera<\/i>) \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0438\u043b\u0438 \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u0435 \u0444\u043e\u0442\u043e \u0438\u0437 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0439 (<i>photo library<\/i>).<br \/>  \u0412\u00a0<code> iOS 14<\/code> \u0438 <code>SwiftUI 2.0<\/code> \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u00ab\u0440\u043e\u0434\u043d\u043e\u0439\u00bb SwiftUI Map, \u043d\u043e \u043f\u043e\u043a\u0430 \u043e\u043d \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u043f\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 <font color=\"#680ea1\">MKMapView<\/font>, \u0442\u0430\u043a \u0447\u0442\u043e \u043e\u0441\u0442\u0430\u0435\u043c\u0441\u044f \u043f\u0440\u0438 \u0441\u0432\u043e\u0438\u0445.<\/p>\n<p>  \u0412 Xcode 12.2 ( Swift 5.3) <a href=\"https:\/\/www.swiftbysundell.com\/articles\/how-swift-5-3-enhances-swiftui-dsl\/\" rel=\"nofollow\">\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0443\u043b\u0443\u0447\u0448\u0438\u043b\u0441\u044f \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u044f\u0437\u044b\u043a \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f Views \u0432 SwiftUI <\/a> (DSL):<\/p>\n<ol>\n<li>\u043d\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0432 \u044f\u0432\u043d\u043e\u043c <font color=\"#c3178D\">.self<\/font><\/li>\n<\/ol>\n<p>   \u0442\u0430\u043a \u043a\u0430\u043a <font color=\"#680ea1\">Views<\/font> \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u044e\u0442 \u0430\u0442\u0440\u0438\u0431\u0443\u0442 <font color=\"#680ea1\">@ViewBuilder<\/font> \u0438\u0437 \u0441\u0430\u043c\u043e\u0433\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 <font color=\"#680ea1\">View<\/font>, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043d\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c <font color=\"#680ea1\">@ViewBuilder<\/font> \u043a <font color=\"#c3178D\">var<\/font> <font color=\"#680ea1\">body<\/font> (\u043a\u0430\u043a \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u043b \u041f\u043e\u043b \u0425\u044d\u0433\u0435\u0440\u0442\u0438) \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u0439,<br \/>   \u0432\u043d\u0443\u0442\u0440\u0438 <font color=\"#680ea1\">body<\/font> \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e <font color=\"#c3178D\">if else<\/font>, \u043d\u043e \u0438 <font color=\"#c3178D\">if let<\/font> \u0438 <font color=\"#c3178D\">switch<\/font><br \/>   \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u00ab\u0445\u0432\u043e\u0441\u0442\u043e\u0432\u044b\u0445\u00bb \u0437\u0430\u043c\u044b\u043a\u0430\u043d\u0438\u0439<br \/>   \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f <font color=\"#c3178D\"><a href=\"https:\/\/habr.com\/ru\/users\/main\/\" class=\"user_link\">main<\/a><\/font> \u0430\u0442\u0440\u0438\u0431\u0443\u0442 \u0434\u043b\u044f \u0442\u043e\u0447\u043a\u0438 \u0432\u0445\u043e\u0434\u0430 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435<\/p>\n<p>  \u042d\u0442\u043e \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442 \u043a\u043e\u0434 <code>SwiftUI<\/code> \u0438 \u0441\u0434\u0435\u043b\u0430\u0435\u0442 \u0435\u0433\u043e \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u043d\u044f\u0442\u043d\u044b\u043c.<\/p>\n<p>  \u0412 \u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0445\u043e\u0447\u0443 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0421\u0442\u044d\u043d\u0444\u043e\u0440\u0434\u0441\u043a\u0438\u0439 \u043a\u0443\u0440\u0441 CS193P \u0412\u0435\u0441\u043d\u0430 2020 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u043b\u043e\u0436\u043d\u044b\u0439, \u0441 \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u043a\u043e\u0434\u0430 \u0438 \u043d\u044e\u0430\u043d\u0441\u0430\u043c\u0438, \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0432\u044b \u0432\u0440\u044f\u0434 \u043b\u0438 \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u0433\u0434\u0435-\u043d\u0438\u0431\u0443\u0434\u044c \u0435\u0449\u0451 \u043d\u0430\u0439\u0442\u0438. \u041d\u043e \u0435\u0441\u043b\u0438 \u0432\u044b \u00ab\u043f\u0440\u043e\u0440\u0432\u0451\u0442\u0435\u0441\u044c\u00bb, \u0442\u043e \u0432\u044b \u0431\u0435\u0437\u0443\u0441\u043b\u043e\u0432\u043d\u043e \u043e\u0446\u0435\u043d\u0438\u0442\u0435 \u00ab\u043a\u0440\u0430\u0441\u043e\u0442\u0443\u00bb \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u041f\u043e\u043b\u0430 \u0425\u044d\u0433\u0435\u0440\u0442\u0438. \u042d\u0442\u043e \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f, \u0435\u0441\u043b\u0438 \u0432\u044b \u0432\u0441\u043b\u0435\u0434 \u0437\u0430 \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u043e\u0440\u043e\u043c \u0431\u0443\u0434\u0435\u0442\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 Xcode, \u0430 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u0442\u043e, \u043a\u0430\u043a \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u044e\u0442 \u0434\u0440\u0443\u0433\u0438\u0435.<\/p>\n<p>  \u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b \u043a\u0443\u0440\u0441\u0430 \u043d\u0430 \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 <a href=\"https:\/\/cs193p.sites.stanford.edu\/\" rel=\"nofollow\"> CS193p \u2014 \u00abDeveloping\u00a0 Application for iOS\u00bb\u00a0<\/a>. \u0420\u0443\u0441\u0441\u043a\u043e\u044f\u0437\u044b\u0447\u043d\u044b\u0439 \u043a\u043e\u043d\u0441\u043f\u0435\u043a\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f <a href=\"https:\/\/bestkora.com\/IosDeveloper\/lektsiya-1-cs193p-spring-2020-logistika-kursa-i-vvedenie-v-swiftui-chast-1\/\" rel=\"nofollow\"> \u0437\u0434\u0435\u0441\u044c<\/a>.<\/p>\n<p>  P.S. \u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u043e\u0442 \u041f\u043e\u043b\u0430 \u0425\u044d\u0433\u0435\u0440\u0442\u0438 \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 \u043a\u0443\u0440\u0441\u0430. <\/p>\n<p>  \u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0432 \u044d\u0442\u043e\u043c \u043a\u0443\u0440\u0441\u0435, \u043d\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043b\u0441\u044f \u0441 \u0443\u0447\u0430\u0441\u0442\u0438\u0435\u043c \u0438 \u043d\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b\u0441\u044f \u043a\u0435\u043c-\u043b\u0438\u0431\u043e \u0438\u0437 <code>Apple<\/code>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0435\u0433\u043e \u043d\u0435 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0432\u043e\u0441\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u043a\u0430\u043a \u00ab\u0438\u0441\u0442\u0438\u043d\u0443 \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0438\u043d\u0441\u0442\u0430\u043d\u0446\u0438\u0438\u00bb \u043f\u043e \u043f\u043e\u0432\u043e\u0434\u0443 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c <code>SwiftUI<\/code>. \u041d\u0430\u0448\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0441\u0434\u0435\u043b\u0430\u043b\u0430 \u0432\u0441\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0435, \u0447\u0442\u043e\u0431\u044b \u0441\u0430\u043c\u0438\u043c \u043f\u043e\u043d\u044f\u0442\u044c \u044d\u0442\u0443 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044e \u0437\u0430 \u043a\u043e\u0440\u043e\u0442\u043a\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0435\u0435 \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u044f, \u0430 \u0437\u0430\u0442\u0435\u043c \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0442\u0435\u043c, \u0447\u0442\u043e \u0443\u0437\u043d\u0430\u043b\u0438, \u0441 \u0432\u0430\u043c\u0438.<\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/post\/528274\/\"> https:\/\/habr.com\/ru\/post\/528274\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/wt\/je\/nq\/wtjenqmuhfl8yyj9xfsimwqmxhg.png\"><\/p>\n<p>  \u0421\u0442\u044d\u043d\u0444\u043e\u0440\u0434\u0441\u043a\u0438\u0439 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442, \u0421\u0428\u0410 \u2014 \u043e\u0434\u0438\u043d \u0438\u0437 \u043b\u0443\u0447\u0448\u0438\u0445 \u0432 \u043c\u0438\u0440\u0435 \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u043a\u0438 (Computer Science). \u041e\u043d \u0449\u0435\u0434\u0440\u043e \u0434\u0435\u043b\u0438\u0442\u0441\u044f \u0441\u0432\u043e\u0438\u043c\u0438 \u043a\u0443\u0440\u0441\u0430\u043c\u0438, \u0438 \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u0441\u0430\u043c\u044b\u0445 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0438 \u0443\u0441\u043f\u0435\u0448\u043d\u044b\u0445 \u043a\u0443\u0440\u0441\u043e\u0432 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u0443\u0440\u0441 <code>CS193P<\/code> \u043f\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043d\u0430 <code>iOS<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0447\u0438\u0442\u0430\u0435\u0442 \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u043e\u0440 \u041f\u043e\u043b \u0425\u044d\u0433\u0435\u0440\u0442\u0438. <br \/>  \u041f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0435 \u0432 \u0432\u0435\u0441\u0435\u043d\u043d\u0435\u043c \u0441\u0435\u043c\u0435\u0441\u0442\u0440\u0435 2020 \u0433\u043e\u0434\u0430 \u043b\u0435\u043a\u0446\u0438\u0438 \u0421\u0442\u044d\u043d\u0444\u043e\u0440\u0434\u0441\u043a\u043e\u0433\u043e \u043a\u0443\u0440\u0441\u0430 <code>CS193P<\/code> \u00abDeveloping\u00a0 Application for iOS with SwiftUI\u00bb\u00a0(\u00ab\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0434\u043b\u044f iOS \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c SwiftUI\u00bb) \u0431\u044b\u043b\u0438 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043d\u044b \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u0430\u043c \u0421\u0442\u044d\u043d\u0444\u043e\u0440\u0434\u0430 \u0441 \u043e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u0435\u0439 \u043d\u0430 \u043d\u043e\u0432\u044b\u0439 \u043f\u0440\u043e\u0434\u0443\u043a\u0442, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 <code>Apple<\/code> \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c \u0432 2019 \u0433, \u2014 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a <code>SwiftUI<\/code> \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0440\u0435\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 (UI). \u041d\u0430 <a href=\"https:\/\/cs193p.sites.stanford.edu\/\" rel=\"nofollow\">\u0441\u0430\u0439\u0442\u0435 \u043a\u0443\u0440\u0441\u0430\u00a0<\/a>\u0432\u044b \u043d\u0430\u0439\u0434\u0435\u0442\u0435 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u044b\u043b\u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u0430\u043c \u0421\u0442\u044d\u043d\u0444\u043e\u0440\u0434\u0430 \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0435 \u0432\u0435\u0441\u0435\u043d\u043d\u0435\u0433\u043e \u0441\u0435\u043c\u0435\u0441\u0442\u0440\u0430 2020 \u0433.: \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0432\u0438\u0434\u0435\u043e, \u0441\u043b\u0430\u0439\u0434\u044b, \u0434\u043e\u043c\u0430\u0448\u043d\u0438\u0435 \u0437\u0430\u0434\u0430\u043d\u0438\u044f \u0438 \u043a\u043e\u0434 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432. <\/p>\n<p>  <code>SwiftUI<\/code> \u2014 \u044d\u0442\u043e \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043d\u043e\u0432\u0430\u044f \u0432\u0435\u0449\u044c, \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0431\u044b\u043b\u043e \u0432\u0441\u0435\u0433\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0435\u0441\u044f\u0446\u0435\u0432 \u043e\u0442 \u0440\u043e\u0434\u0443 \u043d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u0440\u043e\u0447\u0442\u0435\u043d\u0438\u044f \u043b\u0435\u043a\u0446\u0438\u0439. \u041d\u043e \u044d\u0442\u043e \u0441\u0430\u043c\u044b\u0439 \u043f\u0435\u0440\u0435\u0434\u043e\u0432\u043e\u0439 \u043a\u0440\u0430\u0439 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435, \u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u0434\u043e\u0431\u0440\u0430\u043b\u0438\u0441\u044c \u0434\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043d\u0430 <code>iOS<\/code>. \u0412 \u0438\u044e\u043d\u0435 2020 \u0433. \u0441\u043e\u0441\u0442\u043e\u044f\u043b\u0430\u0441\u044c \u043c\u0435\u0436\u0434\u0443\u043d\u0430\u0440\u043e\u0434\u043d\u0430\u044f \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432<code> Apple WWDC <\/code>\u0438 \u0442\u0430\u043c \u0431\u044b\u043b\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f <code>SwiftUI 2.0<\/code>. \u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u0432\u0435\u0440\u0441\u0438\u0438 <code>SwiftUI 2.0<\/code> \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u044b \u043d\u0430 <a href=\"https:\/\/cs193p.sites.stanford.edu\/\" rel=\"nofollow\"> \u0441\u0430\u0439\u0442\u0435 \u043a\u0443\u0440\u0441\u0430<\/a> \u043d\u0430 \u0437\u0430\u043a\u043b\u0430\u0434\u043a\u0435 <code>WWDC<\/code>.  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-313404","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/313404","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=313404"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/313404\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=313404"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=313404"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=313404"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}