{"id":341750,"date":"2022-11-25T15:01:00","date_gmt":"2022-11-25T15:01:00","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=341750"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=341750","title":{"rendered":"<span>Core Data \u0432 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u043c \u0438\u043d\u0442\u0435\u0440\u044c\u0435\u0440\u0435 SwftUI. \u0412\u0437\u0430\u0438\u043c\u043e\u0441\u0432\u044f\u0437\u044c \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432. \u0414\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0439 @FetchRequest. \u0447\u0430\u0441\u0442\u044c 2<\/span>"},"content":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-1\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\u0412 <a href=\"https:\/\/habr.com\/ru\/post\/663974\/\">\u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438<\/a> \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438 \u043e\u0441\u043d\u043e\u0432\u044b \u0440\u0430\u0431\u043e\u0442\u044b \u0441 <code><font color=\"#680ea1\">Core Data<\/font><\/code> \u0432 <code><font color=\"#680ea1\">SwiftUI<\/font><\/code> \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0435 <i>Apple<\/i>. \u042d\u0442\u043e \u0431\u044b\u043b\u043e \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c \u043e\u0434\u0438\u043d \u043e\u0431\u044a\u0435\u043a\u0442 <code><font color=\"#680ea1\">Core Data<\/font><\/code> \u0441 \u043e\u0434\u043d\u0438\u043c \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u043c, \u0438 \u0442\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u0431\u044b\u043b\u043e \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e, \u0447\u0442\u043e \u0434\u0430\u0432\u0430\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c <code><font color=\"#680ea1\">Core Data<\/font><\/code> \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \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 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0438 <code><font color=\"#c3178D\">extension<\/font><\/code> \u0438\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 <code><font color=\"#c3178D\">class<\/font><\/code>, \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u044b\u0445 <code>Xcode<\/code>, \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u043a\u043e\u043c\u0444\u043e\u0440\u0442\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 <code><font color=\"#680ea1\">Core Data<\/font><\/code> \u0432 <code><font color=\"#680ea1\">SwiftUI<\/font><\/code>. \u042d\u0442\u0438 \u043a\u043b\u0430\u0441\u0441\u044b \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043c\u0438\u043d\u0438\u0430\u0442\u044e\u0440\u043d\u044b\u043c\u0438 <code>ViewModels<\/code> \u0434\u043b\u044f \u043d\u0430\u0448\u0438\u0445 <code><font color=\"#680ea1\">SwiftUI Views<\/font><\/code>, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u043d\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0442 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u044b <code><font color=\"#680ea1\">ObservableObject<\/font><\/code> \u0438 <code><font color=\"#680ea1\">Identifiable<\/font><\/code>. \u0418 <code>Apple<\/code> \u043d\u0430\u0443\u0447\u0438\u043b\u0430 \u0438\u0445 \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e \u00ab\u0438\u0433\u0440\u0430\u0442\u044c\u00bb \u043d\u0430 \u043f\u043e\u043b\u0435 \u0440\u0435\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438 SwiftUI. <\/p>\n<p>  \u0412\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0441\u0442\u0430\u0442\u044c\u0438 \u044f \u0445\u043e\u0447\u0443 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u0440\u043e\u043b\u044c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u044b\u0445 <code>Xcode<\/code> \u043a\u043b\u0430\u0441\u0441\u043e\u0432 <code><font color=\"#c3178D\">class<\/font><\/code> \u0434\u043b\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 <code><font color=\"#680ea1\">Core Data<\/font><\/code> \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0432\u043e\u0437\u0440\u0430\u0441\u0442\u0430\u0435\u0442 \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0432\u0437\u0430\u0438\u043c\u043e\u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u043c\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438 \u2014 \u0440\u0435\u0439\u0441\u0430\u043c\u0438 <code><font color=\"#680ea1\">Flights<\/font><\/code>, \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442\u0430\u043c\u0438 <code><font color=\"#680ea1\">Airports<\/font><\/code> \u0438 \u0430\u0432\u0438\u0430\u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f\u043c\u0438 <code><font color=\"#680ea1\">AirLines<\/font><\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0432 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0435 \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 <a href=\"https:\/\/ru.flightaware.com\/\" rel=\"nofollow noopener noreferrer\"> FlightAware <\/a> \u0438 \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u0435\u043c \u0432 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 <code><font color=\"#680ea1\">Core Data<\/font><\/code>. <\/p>\n<p>  \u0421\u043e\u0437\u0434\u0430\u0432\u0430\u0435\u043c\u043e\u0435 \u0432 \u044d\u0442\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441 \u0438\u043c\u0435\u043d\u0435\u043c <code>CoreDataSwiftUIFlights<\/code> \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0438\u043b\u044c\u043d\u043e \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u043d\u043e\u0439 \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0435\u0439 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f <a href=\"https:\/\/cs193p.sites.stanford.edu\/2020\" rel=\"nofollow noopener noreferrer\">Enroute \u0438\u0437 \u0441\u0442\u044d\u043d\u0444\u043e\u0440\u0434\u0441\u043a\u0438\u0445 \u043a\u0443\u0440\u0441\u043e\u0432 CS193P 2020<\/a>, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e \u043f\u043e\u0434\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 <a href=\"https:\/\/ru.flightaware.com\/\" rel=\"nofollow noopener noreferrer\"> FlightAware <\/a> \u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043e\u0442 \u0432\u0430\u0441 \u043f\u043b\u0430\u0442\u043d\u043e\u0439 \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0438 \u043d\u0430 \u0441\u0435\u0440\u0432\u0438\u0441 <a href=\"https:\/\/ru.flightaware.com\/\" rel=\"nofollow noopener noreferrer\"> FlightAware <\/a>. <\/p>\n<p>  \u041e\u0434\u043d\u0430\u043a\u043e, \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0432\u0448\u0438\u0441\u044c \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 <a href=\"https:\/\/ru.flightaware.com\/\" rel=\"nofollow noopener noreferrer\">FlightAware<\/a>, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0441\u0440\u0435\u0437 \u043b\u044e\u0431\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0435\u0439 \u0432\u0430\u0441 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u0440\u0435\u0439\u0441\u0430\u0445 <code><font color=\"#680ea1\">Flights<\/font><\/code>, \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442\u0430\u0445 <code><font color=\"#680ea1\">Airports<\/font><\/code> \u0438 \u0430\u0432\u0438\u0430\u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f\u0445 <code><font color=\"#680ea1\">Airlines<\/font><\/code> \u0432 <code>JSON<\/code> \u0444\u043e\u0440\u043c\u0430\u0442\u0435. \u042d\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u044e\u0442\u0441\u044f \u0432 <code><font color=\"#680ea1\">Core Data<\/font><\/code> \u0441 \u0443\u0447\u0435\u0442\u043e\u043c \u0432\u0437\u0430\u0438\u043c\u043e\u0441\u0432\u044f\u0437\u0435\u0439 \u044d\u0442\u0438\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u0438 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u0438\u0434\u0435\u0442\u044c \u0432\u0441\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0440\u0435\u0439\u0441\u0430\u0445, \u043d\u043e \u0438 \u0434\u0435\u043b\u0430\u0442\u044c \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043a \u043d\u0435\u0439 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432 \u0438 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0435 \u043d\u0443\u0436\u043d\u044b\u043c \u0432\u0430\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/uv\/9x\/sk\/uv9xsks6w1taoephiojrt2lvyzw.png\" data-src=\"https:\/\/habrastorage.org\/webt\/uv\/9x\/sk\/uv9xsks6w1taoephiojrt2lvyzw.png\"\/> <\/p>\n<p>  \u041a\u043e\u0434 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430<b><a href=\"https:\/\/github.com\/BestKora\/CoreDataSwiftUIFlights\" rel=\"nofollow noopener noreferrer\"> Github<\/a><\/b>.<br \/>  <a name=\"habracut\"><\/a><\/p>\n<h3>\u041c\u041e\u0414\u0415\u041b\u042c \u0414\u0410\u041d\u041d\u042b\u0425 \u0432 CORE DATA<\/h3>\n<p>  \u041d\u0430\u0448\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 <code>CoreDataSwiftUIFlights<\/code> \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u0440\u0435\u0439\u0441\u044b, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0441 \u043c\u0435\u0436\u0434\u0443\u043d\u0430\u0440\u043e\u0434\u043d\u044b\u043c \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442\u043e\u043c \u0421\u0430\u043d-\u0424\u0440\u0430\u043d\u0446\u0438\u0441\u043a\u043e <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9C%D0%B5%D0%B6%D0%B4%D1%83%D0%BD%D0%B0%D1%80%D0%BE%D0%B4%D0%BD%D1%8B%D0%B9_%D0%B0%D1%8D%D1%80%D0%BE%D0%BF%D0%BE%D1%80%D1%82_%D0%A1%D0%B0%D0%BD-%D0%A4%D1%80%D0%B0%D0%BD%D1%86%D0%B8%D1%81%D0%BA%D0%BE\" rel=\"nofollow noopener noreferrer\">KSFO<\/a> \u0438 \u043c\u0435\u0436\u0434\u0443\u043d\u0430\u0440\u043e\u0434\u043d\u044b\u043c \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442\u043e\u043c \u041e&#8217;\u0425\u0430\u0440\u0430 \u0432 \u0427\u0438\u043a\u0430\u0433\u043e <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9E%E2%80%99%D0%A5%D0%B0%D1%80%D0%B0_(%D0%B0%D1%8D%D1%80%D0%BE%D0%BF%D0%BE%D1%80%D1%82)\" rel=\"nofollow noopener noreferrer\">KORD<\/a>. \u042d\u0442\u043e \u043a\u043e\u0434\u044b \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442\u043e\u0432. <\/p>\n<p>  \u041d\u0430 UI \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043c\u044b \u0432\u0438\u0434\u0438\u043c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0440\u0435\u0439\u0441\u043e\u0432 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0430\u0432\u0438\u0430\u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0439 \u0441 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442\u0430\u043c\u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u043e\u0439 \u0434\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e \u0438 \u0442.\u0434. \u0412 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u0432 \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 \u044d\u0442\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u0440\u0435\u0439\u0441 <code>United Air Lines UAL412<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043b\u0435\u0442\u0438\u0442 \u0438\u0437 \u0421\u0430\u043d-\u0424\u0440\u0430\u043d\u0446\u0438\u0441\u043a\u043e \u0432 \u041c\u0435\u0445\u0438\u043a\u043e. \u041e\u043d \u043d\u0435\u0434\u0430\u0432\u043d\u043e \u0432\u044b\u043b\u0435\u0442\u0435\u043b, \u043f\u0440\u043e\u043b\u0435\u0442\u0435\u0432 \u0432\u0441\u0435\u0433\u043e 3% \u043f\u0443\u0442\u0438 \u0434\u043b\u0438\u043d\u043e\u044e 3032 \u043a\u043c, \u0438 \u043f\u0440\u0438\u0431\u0443\u0434\u0435\u0442 \u0432 \u041c\u0435\u0445\u0438\u043a\u043e \u043f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0432 11:10. <\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u043d\u0430\u0439\u0442\u0438 \u043d\u0443\u0436\u043d\u044b\u0435 \u0432\u0430\u043c \u0440\u0435\u0439\u0441\u044b, \u0442\u043e \u0432 \u043f\u0440\u0430\u0432\u043e\u043c \u0432\u0435\u0440\u0445\u043d\u0435\u043c \u0443\u0433\u043b\u0443 \u044d\u043a\u0440\u0430\u043d\u0430 \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0430\u044f \u043a\u043d\u043e\u043f\u043a\u0430 \u0441 \u0438\u043c\u0435\u043d\u0435\u043c \u201cFilter\u201d, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043d\u0430\u043c \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u043e \u0442\u043e\u043c\u0443, \u043e\u0442\u043a\u0443\u0434\u0430 <code>Origin<\/code> \u0438 \u043a\u0443\u0434\u0430 <code>Destination<\/code> \u043b\u0435\u0442\u0438\u0442 \u0441\u0430\u043c\u043e\u043b\u0435\u0442, \u043a\u0430\u043a\u043e\u0439 \u0430\u0432\u0438\u0430\u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 <code>Airline<\/code> \u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0441\u0430\u043c\u043e\u043b\u0435\u0442 \u0432 \u0432\u043e\u0437\u0434\u0443\u0445\u0435 \u0432 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0438\u043b\u0438 \u043d\u0435\u0442 <code>Enroute only<\/code>, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0435\u0441\u0442\u044c \u0440\u0435\u0439\u0441\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0437\u0430\u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u043d\u0430 \u043f\u0440\u0438\u0431\u044b\u0442\u0438\u0435 \u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f, \u043d\u043e, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043e\u043d\u0438 \u0435\u0449\u0451 \u043d\u0435 \u0432\u0437\u043b\u0435\u0442\u0435\u043b\u0438 \u0438\u043b\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u043e \u043f\u0440\u0438\u043b\u0435\u0442\u0435\u043b\u0438 \u0438 \u0443\u0436\u0435 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u043d\u0430 \u0437\u0435\u043c\u043b\u0435.<\/p>\n<p>  \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0440\u0435\u0439\u0441\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0442 \u0432 \u043c\u0435\u0436\u0434\u0443\u043d\u0430\u0440\u043e\u0434\u043d\u044b\u0439 \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442 \u041e&#8217;\u0425\u0430\u0440\u0430 \u0432 \u0427\u0438\u043a\u0430\u0433\u043e \u0438 \u0432 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432 \u0432\u043e\u0437\u0434\u0443\u0445\u0435\u2026<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/sa\/ax\/tq\/saaxtqjkrbfo9wrewhu8s7px6k4.png\" data-src=\"https:\/\/habrastorage.org\/webt\/sa\/ax\/tq\/saaxtqjkrbfo9wrewhu8s7px6k4.png\"\/><\/p>\n<p>  \u2026 \u0438\u043b\u0438 \u0440\u0435\u0439\u0441\u044b, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0435 \u0430\u0432\u0438\u0430\u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0435\u0439 <code>United Air Lines<\/code> \u0438 \u043d\u0430\u0445\u043e\u0434\u044f\u0449\u0438\u0435\u0441\u044f \u0432 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432 \u0432\u043e\u0437\u0434\u0443\u0445\u0435:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/3c\/gh\/mo\/3cghmogfhzpsnvpd8syayca9uts.png\" data-src=\"https:\/\/habrastorage.org\/webt\/3c\/gh\/mo\/3cghmogfhzpsnvpd8syayca9uts.png\"\/><\/p>\n<p>  \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0440\u0435\u0439\u0441\u043e\u0432 <code><font color=\"#680ea1\">Flights<\/font><\/code> \u043c\u043e\u0436\u043d\u043e \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e \u043f\u0435\u0440\u0432\u044b\u043c \u0431\u0443\u043a\u0432\u0430\u043c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u0433\u043e\u0440\u043e\u0434\u0430 \u043f\u0440\u0438\u0431\u044b\u0442\u0438\u044f, \u0432\u0432\u043e\u0434\u0438\u043c\u044b\u043c \u0432 \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435, \u0435\u0441\u043b\u0438 \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442 \u043f\u0440\u0438\u0431\u044b\u0442\u0438\u044f <code>Destination<\/code> \u043d\u0435 \u0437\u0430\u0434\u0430\u043d \u0436\u0435\u0441\u0442\u043a\u043e \u0432 \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/4p\/ct\/oz\/4pctoz10p_gcud3nh4ovkmxckvk.png\" data-src=\"https:\/\/habrastorage.org\/webt\/4p\/ct\/oz\/4pctoz10p_gcud3nh4ovkmxckvk.png\"\/><\/p>\n<p>  \u0421\u043f\u0438\u0441\u043e\u043a \u0440\u0435\u0439\u0441\u043e\u0432 <code><font color=\"#680ea1\">Flights<\/font><\/code>, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u043f\u043e \u043a\u0430\u043a\u043e\u043c\u0443 \u0443\u0433\u043e\u0434\u043d\u043e \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u044e, \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044e <code>Distance<\/code> \u043c\u0435\u0436\u0434\u0443 \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442\u0430\u043c\u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438 \u043f\u0440\u0438\u0431\u044b\u0442\u0438\u044f \u0438 \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043f\u0440\u0438\u0431\u044b\u0442\u0438\u044f <code>ActualOn<\/code> (\u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0438\u043b\u0438 \u043f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e):<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/gl\/hy\/z8\/glhyz8tpdqt7pzrny9eiz_dhbwm.png\" data-src=\"https:\/\/habrastorage.org\/webt\/gl\/hy\/z8\/glhyz8tpdqt7pzrny9eiz_dhbwm.png\"\/><br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/hm\/0w\/mh\/hm0wmhtdyuj6pvrsilu99gje8oy.png\" data-src=\"https:\/\/habrastorage.org\/webt\/hm\/0w\/mh\/hm0wmhtdyuj6pvrsilu99gje8oy.png\"\/><\/p>\n<p>  \u0412\u0441\u0435 \u044d\u0442\u0438 \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u044f\u0446\u0438\u0438 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 <code><font color=\"#680ea1\">Core Data<\/font><\/code> \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0432\u0441\u0435\u0433\u043e \u0434\u0432\u0443\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c <code><font color=\"#680ea1\">SwiftUI<\/font><\/code>: <code><font color=\"#680ea1\">@FetchRequest<\/font><\/code> \u0438 <code><font color=\"#680ea1\">View<\/font><\/code> \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0443 <code><font color=\"#680ea1\">onChange<\/font><\/code>:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/vn\/q2\/-z\/vnq2-zjdfntazobhsc0vr5qyg6u.png\" data-src=\"https:\/\/habrastorage.org\/webt\/vn\/q2\/-z\/vnq2-zjdfntazobhsc0vr5qyg6u.png\"\/><\/p>\n<p>  \u041f\u043e\u043c\u0438\u043c\u043e \u0440\u0435\u0439\u0441\u043e\u0432 <code><font color=\"#680ea1\">Flights<\/font><\/code>, \u043d\u0430\u043c \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043f\u0438\u0441\u043e\u043a \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442\u043e\u0432 <code><font color=\"#680ea1\">Airports<\/font><\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u0435\u043c \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e \u043f\u0435\u0440\u0432\u044b\u043c \u0431\u0443\u043a\u0432\u0430\u043c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u0433\u043e\u0440\u043e\u0434\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/cy\/ar\/y2\/cyary2tfmhxojoyznnym3a2vqjy.png\" data-src=\"https:\/\/habrastorage.org\/webt\/cy\/ar\/y2\/cyary2tfmhxojoyznnym3a2vqjy.png\"\/><\/p>\n<p>  \u2026 \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043e \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u043c \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442\u0435 \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0432 \u0432\u0438\u0434\u0435 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 \u043a\u0430\u0440\u0442\u0435 \u0438 \u0442\u0430\u0431\u043b\u043e \u043f\u0440\u0438\u043b\u0435\u0442\u043e\u0432 \u0438 \u0432\u044b\u043b\u0435\u0442\u043e\u0432:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/jk\/ms\/ha\/jkmshazeieng7adhhav9otf19lw.png\" data-src=\"https:\/\/habrastorage.org\/webt\/jk\/ms\/ha\/jkmshazeieng7adhhav9otf19lw.png\"\/><\/p>\n<p>  \u0417\u0434\u0435\u0441\u044c \u0442\u0430\u043a\u0436\u0435 \u043d\u0430 \u043f\u043e\u043c\u043e\u0449\u044c \u043d\u0430\u043c \u043f\u0440\u0438\u0445\u043e\u0434\u044f\u0442 <code><font color=\"#680ea1\">@FetchRequest<\/font><\/code> \u0438 <code><font color=\"#680ea1\">View<\/font><\/code> \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 <code><font color=\"#680ea1\">onChange<\/font><\/code>:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/9u\/ui\/gj\/9uuigj-_h1zzcrb6twhonisoapk.png\" data-src=\"https:\/\/habrastorage.org\/webt\/9u\/ui\/gj\/9uuigj-_h1zzcrb6twhonisoapk.png\"\/><\/p>\n<p>  UI \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u2014 \u044d\u0442\u043e \u0437\u0434\u043e\u0440\u043e\u0432\u043e! \u041d\u043e, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442\u0435 \u0441 \u0431\u0430\u0437\u043e\u0439 \u0434\u0430\u043d\u043d\u044b\u0445 <code><font color=\"#680ea1\">Core Data<\/font><\/code>, \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u2014 \u044d\u0442\u043e \u041c\u043e\u0434\u0435\u043b\u044c \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438 \u0438 \u0438\u0445 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430\u043c\u0438, \u0430 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0437\u043d\u0430\u0442\u044c, \u043a\u0430\u043a\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u043d\u0430\u043c \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 <a href=\"https:\/\/ru.flightaware.com\/\" rel=\"nofollow noopener noreferrer\">FlightAware<\/a>.<\/p>\n<h2>\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u043f\u043e\u043b\u0435\u0442\u0430\u043c\u0438 <font color=\"#680ea1\">Flights<\/font>, \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442\u0430\u043c\u0438 <font color=\"#680ea1\">Airports<\/font> \u0438 \u0430\u0432\u0438\u0430\u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f\u043c\u0438 <font color=\"#680ea1\">AirLines<\/font> \u0438\u0437 FlightAware \u0432 \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 <font color=\"#680ea1\">Core Data<\/font><\/h2>\n<p>.<\/p>\n<p>  \u0412\u043e\u0442 \u043a\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u0430\u044f \u0441 \u0441\u0430\u0439\u0442\u0430 <a href=\"https:\/\/ru.flightaware.com\/\" rel=\"nofollow noopener noreferrer\"> FlightAware <\/a> \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u0440\u0435\u0439\u0441\u0430\u0445 <code><font color=\"#680ea1\">Flights<\/font><\/code>, \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442\u0430\u0445 <code><font color=\"#680ea1\">Airports<\/font><\/code> \u0438 \u0430\u0432\u0438\u0430\u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f\u0445 <code><font color=\"#680ea1\">Airlines<\/font><\/code> \u0432 <code>JSON<\/code> \u0444\u043e\u0440\u043c\u0430\u0442\u0435:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/ni\/eo\/qx\/nieoqx0kin0-egd-cggibd6mxee.png\" data-src=\"https:\/\/habrastorage.org\/webt\/ni\/eo\/qx\/nieoqx0kin0-egd-cggibd6mxee.png\"\/><\/p>\n<p>  \u042f \u0445\u043e\u0447\u0443 \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u044d\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 <code><font color=\"#680ea1\">Core Data<\/font><\/code> \u0438 \u0431\u0443\u0434\u0443 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u0438\u0445 \u0432 \u0432\u0438\u0434\u0435 \u0441\u043f\u0438\u0441\u043a\u043e\u0432 \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442\u043e\u0432, \u0430\u0432\u0438\u0430\u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0439 \u0438 \u0440\u0435\u0439\u0441\u043e\u0432, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u0438 \u0441\u043f\u0438\u0441\u043a\u0438 \u043f\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u043c \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u044f\u043c.<\/p>\n<p>  \u041a\u0430\u043a \u0438 \u0432 \u043f\u0440\u043e\u0448\u043b\u044b\u0439 \u0440\u0430\u0437, \u043c\u044b \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0441 \u0448\u0430\u0431\u043b\u043e\u043d\u0430, \u043e\u0442\u043c\u0435\u0447\u0430\u044f \u0433\u0430\u043b\u043e\u0447\u043a\u043e\u0439 \u043e\u043f\u0446\u0438\u044e <b>Use Core Data<\/b> \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043d\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430. \u041a\u0430\u043a \u0438 \u0432 \u043f\u0440\u043e\u0448\u043b\u044b\u0439 \u0440\u0430\u0437, \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0444\u0430\u0439\u043b <b>Persistence.swift <\/b>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u0434\u043e\u0441\u0442\u0443\u043f \u043a <code><font color=\"#680ea1\">Core Data<\/font><\/code> \u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u0435\u043c \u0442\u0430\u043a\u0436\u0435, \u043a\u0430\u043a \u0432 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u043e\u0448\u043b\u043e\u043c \u0448\u0430\u0431\u043b\u043e\u043d\u043d\u043e\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438, \u043d\u043e \u0441 \u0434\u0440\u0443\u0433\u043e\u0439 \u041c\u043e\u0434\u0435\u043b\u044c\u044e \u0434\u0430\u043d\u043d\u044b\u0445:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/qz\/sp\/cy\/qzspcym4mvaogq-ckrn7xdg07oy.png\" data-src=\"https:\/\/habrastorage.org\/webt\/qz\/sp\/cy\/qzspcym4mvaogq-ckrn7xdg07oy.png\"\/><\/p>\n<p>  \u042f \u043d\u0435 \u0431\u0443\u0434\u0443 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0442\u043e\u043c, \u043a\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0442\u0430\u043a\u0443\u044e \u041c\u043e\u0434\u0435\u043b\u044c\u044e \u0434\u0430\u043d\u043d\u044b\u0445:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/o7\/yx\/ha\/o7yxhaekbrch9wigrqqya1chffw.png\" data-src=\"https:\/\/habrastorage.org\/webt\/o7\/yx\/ha\/o7yxhaekbrch9wigrqqya1chffw.png\"\/><\/p>\n<p>  \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u044d\u0442\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432 <a href=\"https:\/\/drive.google.com\/drive\/folders\/1dCUtNFoUXVZOUCJSHSqnaKPu1CTqmBrX?usp=sharing\" rel=\"nofollow noopener noreferrer\">\u0440\u0443\u0441\u0441\u043a\u043e\u044f\u0437\u044b\u0447\u043d\u043e\u043c \u043a\u043e\u043d\u0441\u043f\u0435\u043a\u0442\u0435 \u0441\u0442\u044d\u043d\u0444\u043e\u0440\u0434\u0441\u043a\u0438\u0445 \u041b\u0435\u043a\u0446\u0438\u0439 CS193P 2020<\/a>.<br \/>  \u041c\u044b \u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u043c\u0435\u0436\u0434\u0443 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u201c\u0432\u0437\u0430\u0438\u043c\u043e\u0441\u0432\u044f\u0437\u0438\u201d \u0442\u0438\u043f\u0430 \u201eone to many\u201c (\u00bb\u043e\u0434\u0438\u043d-\u043a\u043e \u043c\u043d\u043e\u0433\u0438\u043c&#187;) \u0438\u043b\u0438 \u201eone to one\u201c (\u00bb\u043e\u0434\u0438\u043d-\u043a \u043e\u0434\u043d\u043e\u043c\u0443&#187;). \u0412 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u0434\u043b\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442 <code><font color=\"#680ea1\">Airport<\/font><\/code> \u2014 \u044d\u0442\u043e \u0440\u0435\u0439\u0441\u044b <code><font color=\"#680ea1\">flightsFrom_<\/font><\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0441 \u044d\u0442\u043e\u0433\u043e \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442\u0430, \u0438 \u0440\u0435\u0439\u0441\u044b <code><font color=\"#680ea1\">flightsTo_<\/font><\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0438\u0431\u044b\u0432\u0430\u044e\u0442 \u0432 \u044d\u0442\u043e\u0442 \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442, \u0430 \u0434\u043b\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0430\u0432\u0438\u0430\u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f <code><font color=\"#680ea1\">Airline<\/font><\/code> \u2014 \u044d\u0442\u043e \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0435 \u0435\u0439 \u0440\u0435\u0439\u0441\u044b <code><font color=\"#680ea1\">flights_<\/font><\/code>. <\/p>\n<p>  \u0426\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u044b\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c \u043d\u0430\u0448\u0435\u0439 \u041c\u043e\u0434\u0435\u043b\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0440\u0435\u0439\u0441 <code><font color=\"#680ea1\">Flight<\/font><\/code>, \u0443 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0435\u0441\u0442\u044c \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f <code><font color=\"#680ea1\">destination<\/font><\/code> \u0438 \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442 \u043f\u0440\u0438\u0431\u044b\u0442\u0438\u044f <code><font color=\"#680ea1\">origin<\/font><\/code>, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0430\u0432\u0438\u0430\u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f <code><font color=\"#680ea1\">airline<\/font><\/code>, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0430\u044f \u044d\u0442\u043e\u0442 \u0440\u0435\u0439\u0441. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442 \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442 <code><font color=\"#680ea1\">Airport<\/font><\/code> \u0438 \u043e\u0431\u044a\u0435\u043a\u0442 \u0430\u0432\u0438\u0430\u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f <code><font color=\"#680ea1\">Airline<\/font><\/code>. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0443 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0440\u0435\u0439\u0441 <code><font color=\"#680ea1\">Flight<\/font><\/code> \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 \u0441 \u043f\u043e\u043b\u0451\u0442\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439 \u0432 \u0435\u0434\u0438\u043d\u0438\u0446\u0430\u0445 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u043e\u0439 \u043d\u0430\u043c \u043c\u0435\u0442\u0440\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u043c\u0435\u0440 \u0421\u0418:<\/p>\n<p>  <b>\u0440\u0435\u0439\u0441 <font color=\"#680ea1\">Flight<\/font><\/b>  <\/p>\n<div class=\"scrollable-table\">\n<table>\n<tr>\n<td>actualIn<\/td>\n<td>\u0420\u0435\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u0438\u0431\u044b\u0442\u0438\u044f \u043a \u0433\u0435\u0439\u0442\u0443<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>actualOff<\/td>\n<td>\u0420\u0435\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043b\u0435\u0442\u0430<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>actualOn<\/td>\n<td>\u0420\u0435\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u0438\u0431\u044b\u0442\u0438\u044f \u043d\u0430 \u0432\u0437\u043b\u0435\u0442\u043d\u0443\u044e \u043f\u043e\u043b\u043e\u0441\u0443<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>aircraftType_<\/td>\n<td>\u0422\u0438\u043f \u0441\u0430\u043c\u043e\u043b\u0435\u0442\u0430<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>estimatedIn<\/td>\n<td>\u041f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u0438\u0431\u044b\u0442\u0438\u044f \u043a \u0433\u0435\u0439\u0442\u0443<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>estimatedOff<\/td>\n<td>\u041f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043b\u0435\u0442\u0430<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>estimatedOn_<\/td>\n<td>\u041f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u0438\u0431\u044b\u0442\u0438\u044f \u043d\u0430 \u0432\u0437\u043b\u0435\u0442\u043d\u0443\u044e \u043f\u043e\u043b\u043e\u0441\u0443<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>filedAirspeed_<\/td>\n<td>\u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u043e\u043b\u0435\u0442\u0430 \u043f\u043e \u041f\u041f\u041f\u00a0<\/td>\n<td>knots (\u0443\u0437\u043b\u044b)<\/td>\n<\/tr>\n<tr>\n<td>filedAltitude<\/td>\n<td>\u0412\u044b\u0441\u043e\u0442\u0430 \u043f\u043e\u043b\u0435\u0442\u0430 \u043f\u043e \u041f\u041f\u041f (100 \u0444\u0443\u0442\u043e\u0432)<\/td>\n<td>100s foots (\u0441\u043e\u0442\u043d\u0438 \u0444\u0443\u0442\u043e\u0432)<\/td>\n<\/tr>\n<tr>\n<td>ident_<\/td>\n<td>\u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0440\u0435\u0439\u0441\u0430<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>progressPercent<\/td>\n<td>\u041f\u0440\u043e\u0446\u0435\u043d\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0440\u0435\u0439\u0441\u0430, \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043d\u0430 \u0432\u044b\u043b\u0435\u0442\u0435\/\u043f\u0440\u0438\u0431\u044b\u0442\u0438\u0438 \u043d\u0430 \u0432\u0437\u043b\u0435\u0442\u043d\u043e-\u043f\u043e\u0441\u0430\u0434\u043e\u0447\u043d\u043e\u0439 \u043f\u043e\u043b\u043e\u0441\u0435.<\/td>\n<td>%<\/td>\n<\/tr>\n<tr>\n<td>routeDistance<\/td>\n<td>\u0417\u0430\u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430. \u041c\u043e\u0436\u0435\u0442 \u043e\u0442\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f.<\/td>\n<td>statute miles (\u043c\u0438\u043b\u0438)<\/td>\n<\/tr>\n<tr>\n<td>scheduledIn<\/td>\n<td>\u0412\u0440\u0435\u043c\u044f \u043f\u0440\u0438\u0431\u044b\u0442\u0438\u044f \u043a \u0433\u0435\u0439\u0442\u0443 \u043f\u043e \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0438\u044e<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>scheduledOff_<\/td>\n<td>\u0412\u0440\u0435\u043c\u044f \u0432\u044b\u043b\u0435\u0442\u0430 \u043f\u043e \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0438\u044e<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>scheduledOn_<\/td>\n<td>\u0412\u0440\u0435\u043c\u044f \u043f\u0440\u0438\u0431\u044b\u0442\u0438\u044f \u043d\u0430 \u0432\u0437\u043b\u0435\u0442\u043d\u0443\u044e \u043f\u043e\u043b\u043e\u0441\u0443 \u043f\u043e \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0438\u044e<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>status_<\/td>\n<td>\u0421\u0442\u0430\u0442\u0443\u0441 \u0440\u0435\u0439\u0441\u0430<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>\u0412\u0417\u0410\u0418\u041c\u041e\u0421\u0412\u042f\u0417\u0418<\/td>\n<td><strong> &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-\u0440\u0435\u0439\u0441\u0430 Flight\u00a0 &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/strong><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>airline_<\/td>\n<td>\u0410\u0432\u0438\u0430\u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f <strong>Airline<\/strong><\/td>\n<td>one-to-one<\/td>\n<\/tr>\n<tr>\n<td>destination_<\/td>\n<td>\u0410\u044d\u0440\u043e\u043f\u043e\u0440\u0442 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f <strong>Airport<\/strong><\/td>\n<td>one-to-one<\/td>\n<\/tr>\n<tr>\n<td>origin_<\/td>\n<td>\u0410\u044d\u0440\u043e\u043f\u043e\u0440\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f <strong>Airport<\/strong><\/td>\n<td>one-to-one<\/td>\n<\/tr>\n<\/table>\n<\/div>\n<p>  \u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e\u0431 \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442\u0430\u0445, \u043d\u043e \u0435\u0441\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u0433\u0435\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442\u0430, \u0447\u0442\u043e \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043d\u0430\u043c \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0438\u0445 \u043d\u0430 \u043a\u0430\u0440\u0442\u0435.<\/p>\n<p>  <b>\u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442 <font color=\"#680ea1\"> Airport<\/font><\/b>  <\/p>\n<div class=\"scrollable-table\">\n<table>\n<tr>\n<td>city_<\/td>\n<td>\u0413\u043e\u0440\u043e\u0434<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>countryCode<\/td>\n<td>\u041a\u043e\u0434 \u0421\u0442\u0440\u0430\u043d\u044b<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>icao_<\/td>\n<td>\u041a\u043e\u0434 \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442\u0430<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>latitude<\/td>\n<td>\u0433\u0435\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0448\u0438\u0440\u043e\u0442\u0430<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>location<\/td>\n<td>\u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>longitude<\/td>\n<td>\u0433\u0435\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0434\u043e\u043b\u0433\u043e\u0442\u0430<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>name<\/td>\n<td>\u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442\u0430<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>state<\/td>\n<td>\u0448\u0442\u0430\u0442<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>timezone<\/td>\n<td>\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043f\u043e\u044f\u0441<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>\u0412\u0417\u0410\u0418\u041c\u041e\u0421\u0412\u042f\u0417\u0418<\/td>\n<td><strong> &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-\u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442\u0430 Airport&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<\/strong><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>flightsfrom_<\/td>\n<td>\u0432\u044b\u043b\u0435\u0442\u044b<\/td>\n<td>one-to-many<\/td>\n<\/tr>\n<tr>\n<td>flightsto_<\/td>\n<td>\u043f\u0440\u0438\u043b\u0435\u0442\u044b<\/td>\n<td>one-to-many<\/td>\n<\/tr>\n<\/table>\n<\/div>\n<p>  <b>\u0430\u0432\u0438\u0430\u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f <font color=\"#680ea1\"> Airline<\/font><\/b>  <\/p>\n<div class=\"scrollable-table\">\n<table>\n<tr>\n<td>code_<\/td>\n<td>\u043a\u043e\u0434 \u0430\u0432\u0438\u0430\u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>name_<\/td>\n<td>\u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0430\u0432\u0438\u0430\u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>shortname_<\/td>\n<td>\u043a\u0440\u0430\u0442\u043a\u043e\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0430\u0432\u0438\u0430\u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>\u0412\u0417\u0410\u0418\u041c\u041e\u0421\u0412\u042f\u0417\u0418<\/td>\n<td><strong>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-\u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442\u0430 Airline&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<\/strong><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>flights_<\/td>\n<td>\u0440\u0435\u0439\u0441\u044b \u0430\u0432\u0438\u0430\u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438<\/td>\n<td>one-to-many<\/td>\n<\/tr>\n<\/table>\n<\/div>\n<p>  \u041f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u201c\u0437\u0430 \u043a\u0443\u043b\u0438\u0441\u0430\u043c\u0438\u201d <code>Xcode<\/code> \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0434\u043b\u044f <code><font color=\"#680ea1\">Core Data<\/font><\/code> \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u043a\u043b\u0430\u0441\u0441\u044b <code><font color=\"#c3178D\">class<\/font><\/code> <code><font color=\"#680ea1\">Airport<\/font><\/code>, <code><font color=\"#680ea1\">Airline<\/font><\/code> \u0438 <code><font color=\"#680ea1\">Flight<\/font><\/code>, \u0435\u0441\u043b\u0438 \u0443 \u043d\u0430\u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u0430 \u043e\u043f\u0446\u0438\u044f \u201c<b>Class Definition<\/b>\u201d:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/c2\/a_\/nc\/c2a_ncwrpurjwr_wz1-yf8hfiwm.png\" data-src=\"https:\/\/habrastorage.org\/webt\/c2\/a_\/nc\/c2a_ncwrpurjwr_wz1-yf8hfiwm.png\"\/><\/p>\n<p>  \u041c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f <code><font color=\"#c3178D\">extension<\/font><\/code> \u044d\u0442\u0438\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 <code><font color=\"#c3178D\">class<\/font><\/code> \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0430\u043c \u0435\u0449\u0435 \u043e\u0434\u043d\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043c\u0438\u043d\u0438-<code>ViewModels<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u044d\u0442\u0438 \u043a\u043b\u0430\u0441\u0441\u044b <code><font color=\"#c3178D\">class<\/font><\/code> \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 <code><font color=\"#680ea1\">Core Data<\/font><\/code>, \u0438 \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u041c\u043e\u0434\u0435\u043b\u0438 \u043a \u0443\u0434\u043e\u0431\u043d\u043e\u043c\u0443 \u0434\u043b\u044f <code><font color=\"#680ea1\">SwiftUI Views<\/font><\/code> \u0432\u0438\u0434\u0443. \u0410 \u0438\u043c\u0435\u043d\u043d\u043e \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u0451\u0442\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0432 \u043c\u0435\u0442\u0440\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u0421\u0418. \u0417\u0430 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u0438 \u0438\u0445 \u0435\u0434\u0438\u043d\u0438\u0446\u0430\u043c\u0438 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f \u0432 iOS \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0442 \u043e\u0431\u044a\u0435\u043a\u0442\u044b <code><font color=\"#680ea1\">Measurement<\/font><\/code> \u2014 \u044d\u0442\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u0442\u0435\u043c\u0430, \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u044b \u0447\u0443\u0442\u044c-\u0447\u0443\u0442\u044c \u043a\u043e\u0441\u043d\u0435\u043c\u0441\u044f \u043d\u0438\u0436\u0435 \u0438 \u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c <a href=\"https:\/\/oleb.net\/blog\/2016\/07\/measurements-and-units\/\" rel=\"nofollow noopener noreferrer\">\u0437\u0434\u0435\u0441\u044c<\/a>. <\/p>\n<p>  \u0418\u0442\u0430\u043a, \u043f\u0440\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 <code><font color=\"#680ea1\">SwiftUI<\/font><\/code> \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 c <code><font color=\"#680ea1\">Core Data<\/font><\/code> \u043c\u044b \u0444\u043e\u043a\u0443\u0441\u0438\u0440\u0443\u0435\u043c\u0441\u044f \u043d\u0430 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f\u0445 <code><font color=\"#c3178D\">extension<\/font><\/code> \u043a\u043b\u0430\u0441\u0441\u043e\u0432 <code><font color=\"#c3178D\">class<\/font><\/code> <code><font color=\"#680ea1\">Core Data<\/font><\/code>: <code><font color=\"#680ea1\">Flight<\/font><\/code>, <code><font color=\"#680ea1\">Airport<\/font><\/code> \u0438 <code><font color=\"#680ea1\">AirLine<\/font><\/code>. \u041c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u00ab\u0437\u0430\u043f\u0440\u044f\u0442\u0430\u0442\u044c\u00bb \u0442\u0443\u0434\u0430 \u0432\u0441\u0435, \u0441 \u0447\u0435\u043c <code><font color=\"#680ea1\">SwiftUI Views<\/font><\/code> \u0431\u0443\u0434\u0435\u0442 \u043d\u0435 \u043a\u043e\u043c\u0444\u043e\u0440\u0442\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c.<\/p>\n<h2>\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 <font color=\"#c3178D\">extension<\/font> \u043a\u043b\u0430\u0441\u0441\u0430 <font color=\"#680ea1\">Airport<\/font>.<\/h2>\n<p>  \u041f\u0435\u0440\u0432\u043e\u0435, \u0447\u0442\u043e \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u044d\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0437\u0430\u0432\u0435\u0434\u043e\u043c\u043e \u041d\u0415-<code><font color=\"#680ea1\">Optional<\/font><\/code> \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u043e\u0431\u044a\u0435\u043a\u0442\u0430 <code><font color=\"#680ea1\">Airport<\/font><\/code>, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a \u043a\u043e\u0434 <code><font color=\"#680ea1\">icao<\/font><\/code> \u0438 \u0433\u043e\u0440\u043e\u0434 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442\u0430 <code><font color=\"#680ea1\">city<\/font><\/code>. \u041a\u0430\u043a \u0431\u044b\u043b\u043e \u0441\u043a\u0430\u0437\u0430\u043d\u043e \u0432 \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0441\u0442\u0430\u0442\u044c\u0438, \u043c\u044b \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c <code><font color=\"#680ea1\">Core Data<\/font><\/code> \u043a\u043e\u043c\u0444\u043e\u0440\u0442\u043d\u0443\u044e \u0434\u043b\u044f \u043d\u0435\u0435 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 <code><font color=\"#680ea1\">Optional<\/font><\/code> \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430\u043c\u0438, \u0430 \u0441\u0430\u043c\u0438 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c \u043d\u0443\u0436\u043d\u044b\u0435 \u043d\u0430\u043c \u041d\u0415-<code><font color=\"#680ea1\">Optional<\/font><\/code> \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u043a\u0430\u043a \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 <code><font color=\"#c3178D\">var<\/font><\/code> \u0441 <code><font color=\"#680ea1\">get{}<\/font><\/code> \u0438 <code><font color=\"#680ea1\">set {}<\/font><\/code>. <\/p>\n<p>  \u0412 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0438 <code><font color=\"#c3178D\">extension<\/font><\/code> \u043a\u043b\u0430\u0441\u0441\u0430 <code><font color=\"#680ea1\">Airport<\/font><\/code> \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0430\u043d\u0430\u043b\u043e\u0433\u0438 \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0432 \u041c\u043e\u0434\u0435\u043b\u0435 \u0414\u0430\u043d\u043d\u044b\u0445 <code><font color=\"#680ea1\">Core Data<\/font><\/code> \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432<code><font color=\"#680ea1\">icao_<\/font><\/code> (\u043a\u043e\u0434 \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442\u0430) \u0438 <code><font color=\"#680ea1\">city_<\/font><\/code> (\u0433\u043e\u0440\u043e\u0434 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f) \u0441 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u043c \u201c\u043f\u043e\u0434\u0447\u0435\u0440\u043a\u0438\u0432\u0430\u043d\u0438\u044f\u201d \u201c_\u201d \u0432 \u043a\u043e\u043d\u0446\u0435 \u0438\u043c\u0435\u043d\u0438. \u042d\u0442\u043e \u0438\u0445 \u041d\u0415-<code><font color=\"#680ea1\">Optional<\/font><\/code> \u0432\u0435\u0440\u0441\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u043e\u0444\u043e\u0440\u043c\u043b\u044f\u0435\u043c \u0432 \u0432\u0438\u0434\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 <code><font color=\"#c3178D\">var<\/font><\/code> <code><font color=\"#680ea1\">icao<\/font><\/code> \u0438 <code><font color=\"#c3178D\">var<\/font><\/code> <code><font color=\"#680ea1\">city<\/font><\/code>:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/ad\/ys\/ll\/adyslluwzuyev-y-uvktbnbitpu.png\" data-src=\"https:\/\/habrastorage.org\/webt\/ad\/ys\/ll\/adyslluwzuyev-y-uvktbnbitpu.png\"\/><br \/>  <b>&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.. .<\/b><br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/gq\/gu\/jx\/gqgujx5f0zybk2pteqeciuokwek.png\" data-src=\"https:\/\/habrastorage.org\/webt\/gq\/gu\/jx\/gqgujx5f0zybk2pteqeciuokwek.png\"\/><\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0434\u043b\u044f \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442\u0430 <code><font color=\"#680ea1\">Airport<\/font><\/code> \u0430\u0442\u0440\u0438\u0431\u0443\u0442 \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f <code><font color=\"#c3178D\">var<\/font><\/code> <code><font color=\"#680ea1\">icao_<\/font><\/code> \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0432\u043d\u0430 <code><font color=\"#c3178D\">nil<\/font><\/code>, \u0442\u043e \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0448\u0438\u0431\u043a\u0430, \u0435\u0451 \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c. \u041a\u043e\u0433\u0434\u0430 \u044f \u0441\u043e\u0437\u0434\u0430\u044e \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442 <code><font color=\"#680ea1\">Airport<\/font><\/code>, \u0442\u043e \u043f\u0435\u0440\u0432\u043e\u0435, \u0447\u0442\u043e \u044f \u0434\u0435\u043b\u0430\u044e \u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 \u043a\u043e\u0434\u0430, \u044d\u0442\u043e \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u044e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e <code><font color=\"#680ea1\">icao<\/font><\/code>, \u0442\u0430\u043a \u0447\u0442\u043e \u043e\u043d\u043e \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0440\u0430\u0432\u043d\u043e <code><font color=\"#c3178D\">nil<\/font><\/code>. \u0415\u0441\u043b\u0438 \u044d\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442, \u0442\u043e \u044f\u0432\u043d\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043a\u0430\u043a\u0430\u044f-\u0442\u043e \u043e\u0448\u0438\u0431\u043a\u0430 \u0432 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>  \u041c\u044b \u043c\u043e\u0433\u043b\u0438 \u0431\u044b \u043f\u043e\u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u043a-\u0442\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u044d\u0442\u0443 \u043e\u0448\u0438\u0431\u043a\u0443 \u043f\u043e\u043b\u0443\u0447\u0448\u0435, \u0447\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0442\u044c \u0430\u0432\u0430\u0440\u0438\u0439\u043d\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0430 \u043c\u044b \u0437\u043d\u0430\u0435\u043c, \u0447\u0442\u043e \u0432\u043e\u0441\u043a\u043b\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 <code><font color=\"#680ea1\">!<\/font><\/code> \u0437\u043d\u0430\u043a \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u201c\u043e\u0431\u0440\u0443\u0448\u0438\u0432\u0430\u0435\u0442\u201d \u0432\u0430\u0448\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435. \u0415\u0441\u043b\u0438 \u0432\u044b \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0435\u0441\u044c \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0442\u043e \u043e\u0431\u0440\u0443\u0448\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u044c \u0442\u0430\u043a\u0438\u0435 \u0441\u043b\u0443\u0447\u0430\u0438 \u043f\u043e\u0432\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u043a\u043b\u0430\u0441\u0441 <code><font color=\"#c3178D\">class<\/font><\/code> <code><font color=\"#680ea1\">Airport<\/font><\/code> \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f <code><font color=\"#680ea1\">Identifiable<\/font><\/code>, \u0438 \u043c\u044b \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <code><font color=\"#c3178D\">var<\/font><\/code> <code><font color=\"#680ea1\">id<\/font><\/code> \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0434 \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442\u0430 <code><font color=\"#680ea1\">icao<\/font><\/code>. \u042f \u0442\u0430\u043a\u0436\u0435 \u0441\u0434\u0435\u043b\u0430\u043b\u0430 \u043e\u0431\u044a\u0435\u043a\u0442 <code><font color=\"#680ea1\">Airport<\/font><\/code> <code><font color=\"#680ea1\">Comparable<\/font><\/code>, \u044d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442\u044b:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/xq\/9h\/nj\/xq9hnjr54zhzishzwewrmc26wgw.png\" data-src=\"https:\/\/habrastorage.org\/webt\/xq\/9h\/nj\/xq9hnjr54zhzishzwewrmc26wgw.png\"\/><\/p>\n<p>  \u041d\u043e \u0435\u0441\u0442\u044c \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u043a\u0443\u0441\u043e\u043a \u0432 \u043d\u0430\u0448\u0435\u0439 \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0433\u043e\u043b\u043e\u0432\u043e\u043b\u043e\u043c\u043a\u0435, \u044d\u0442\u043e \u201c\u0432\u0437\u0430\u0438\u043c\u043e\u0441\u0432\u044f\u0437\u0438\u201d \u043c\u0435\u0436\u0434\u0443 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438 \u0442\u0438\u043f\u0430 \u00abone-to-many\u201c (\u00bb\u043e\u0434\u0438\u043d-\u043a\u043e \u043c\u043d\u043e\u0433\u0438\u043c\u00bb) \u0438\u043b\u0438 \u00abmany-to-many\u00bb (\u00ab\u043c\u043d\u043e\u0433\u0438\u0435-\u043a\u043e \u043c\u043d\u043e\u0433\u0438\u043c\u00bb).<\/p>\n<p>  \u0414\u043b\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430 <code><font color=\"#680ea1\">Airport<\/font><\/code> \u044d\u0442\u043e \u0440\u0435\u0439\u0441\u044b <code><font color=\"#680ea1\">flightsFrom<\/font><\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f, \u0438 <code><font color=\"#680ea1\">flightsTo<\/font><\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0438\u0431\u044b\u0432\u0430\u044e\u0442 \u0432 \u044d\u0442\u043e\u0442 \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/zx\/h1\/cw\/zxh1cwfxpdkqjlnwwjpdsa2vk7k.png\" data-src=\"https:\/\/habrastorage.org\/webt\/zx\/h1\/cw\/zxh1cwfxpdkqjlnwwjpdsa2vk7k.png\"\/><\/p>\n<p>  \u042d\u0442\u0438 \u0432\u0437\u0430\u0438\u043c\u043e\u0441\u0432\u044f\u0437\u0438, <code><font color=\"#680ea1\">flightsFrom<\/font><\/code> \u0438 <code><font color=\"#680ea1\">flightsTo<\/font><\/code>, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0441 \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u0441\u0442\u043e\u0440\u043e\u043d.<\/p>\n<p>  \u0412\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0435 \u0438\u0445 \u043b\u0438\u0431\u043e, \u0438\u043c\u0435\u044f \u0440\u0435\u0439\u0441 <code><font color=\"#680ea1\">Flight<\/font><\/code> \u0441 \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442\u0430\u043c\u0438 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f <code><font color=\"#680ea1\">destination<\/font><\/code> \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f <code><font color=\"#680ea1\">origin<\/font><\/code>, \u0438 \u044d\u0442\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 <code><font color=\"#680ea1\">NSSet<\/font><\/code> \u0434\u043b\u044f <code><font color=\"#680ea1\">flightsFrom<\/font><\/code> \u0438 <code><font color=\"#680ea1\">flightsTo<\/font><\/code> \u0434\u043b\u044f \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442\u043e\u0432 <code><font color=\"#680ea1\">Airport<\/font><\/code>. <\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/hs\/q6\/rz\/hsq6rzaygeawjzpgd4kyekqrwf8.png\" data-src=\"https:\/\/habrastorage.org\/webt\/hs\/q6\/rz\/hsq6rzaygeawjzpgd4kyekqrwf8.png\"\/><\/p>\n<p>  \u041b\u0438\u0431\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0440\u0435\u0439\u0441 <code><font color=\"#680ea1\">Flight<\/font><\/code> \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043a \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430\u043c <code><font color=\"#680ea1\">flightsFrom<\/font><\/code> \u0438 <code><font color=\"#680ea1\">flightsTo<\/font><\/code>. <\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/hm\/bw\/zs\/hmbwzs16wa-bmq9lai8b66nezoo.png\" data-src=\"https:\/\/habrastorage.org\/webt\/hm\/bw\/zs\/hmbwzs16wa-bmq9lai8b66nezoo.png\"\/><\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u0435 \u0440\u0435\u0439\u0441 <code><font color=\"#680ea1\">Flight<\/font><\/code> \u043a <code><font color=\"#680ea1\">flightsTo<\/font><\/code> \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442\u0430 <code><font color=\"#680ea1\">Airport<\/font><\/code>, \u044d\u0442\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442 \u044d\u0442\u043e\u0442 \u0440\u0435\u0439\u0441 <code><font color=\"#680ea1\">Flight<\/font><\/code> \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043d\u0430 \u044d\u0442\u043e\u0442 \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442 <code><font color=\"#680ea1\">Airport<\/font><\/code> \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0443\u043d\u043a\u0442\u0430 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f <code><font color=\"#680ea1\">destination<\/font><\/code>.<\/p>\n<p>  \u042d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u043a\u0440\u0443\u0442\u043e. \u0412\u0441\u0435 \u044d\u0442\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0432\u0430\u0441.<\/p>\n<p>  \u041f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u043a\u0430\u043a <code><font color=\"#680ea1\">Swift<\/font><\/code>, \u0442\u0430\u043a \u0438 <code><font color=\"#680ea1\">SwiftUI<\/font><\/code> \u0443\u0434\u043e\u0431\u043d\u0435\u0435 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0441\u043e \u0441\u0432\u043e\u0438\u043c\u0438 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430\u043c\u0438 <code><font color=\"#680ea1\">Set&lt;Flight><\/font><\/code>, a \u043d\u0435 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0442\u044c \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0422\u0418\u041f\u0430 <code><font color=\"#680ea1\">NSSet as? Set&lt;Flight ><\/font><\/code>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u201c\u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0441\u0430\u0445\u0430\u0440\u201d \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 <code><font color=\"#c3178D\">var<\/font><\/code> <code><font color=\"#680ea1\">flightsTo<\/font><\/code> \u0438 <code><font color=\"#c3178D\">var<\/font><\/code> <code><font color=\"#680ea1\">flightsFrom<\/font><\/code> \u0432 \u0432\u0438\u0434\u0435 <code><font color=\"#680ea1\">Set&lt;Flight ><\/font><\/code>, a \u0432 \u041c\u043e\u0434\u0435\u043b\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u201c\u0432\u0437\u0430\u0438\u043c\u043e\u0441\u0432\u044f\u0437\u0438\u201d \u043e\u043f\u044f\u0442\u044c \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0438\u043c \u0442\u0435\u043c\u0438 \u0436\u0435 \u0438\u043c\u0435\u043d\u0430\u043c\u0438 \u0441 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u043c \u201c\u043f\u043e\u0434\u0447\u0435\u0440\u043a\u0438\u0432\u0430\u043d\u0438\u0435\u043c\u201d \u201c<b>_<\/b>\u201d ( \u0432 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u043a\u043b\u0430\u0441\u0441\u0430\u0445 <font color=\"#c3178D\">class<\/font> \u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 <code><font color=\"#680ea1\">NSSet<\/font><\/code>):<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/4g\/4b\/15\/4g4b15zsutcyhncyaheadxfkrhg.png\" data-src=\"https:\/\/habrastorage.org\/webt\/4g\/4b\/15\/4g4b15zsutcyhncyaheadxfkrhg.png\"\/><br \/>  <b>&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;. .<\/b><br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/_m\/wn\/1v\/_mwn1vohdociro08tqdfnormydk.png\" data-src=\"https:\/\/habrastorage.org\/webt\/_m\/wn\/1v\/_mwn1vohdociro08tqdfnormydk.png\"\/><\/p>\n<h2>\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 <font color=\"#c3178D\">extension<\/font> \u043a\u043b\u0430\u0441\u0441\u043e\u0432 <font color=\"#680ea1\">Airline<\/font> \u0438 <font color=\"#680ea1\">Flight<\/font>.<\/h2>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0442\u0430\u043a\u0436\u0435 \u0438\u0437\u0431\u0430\u0432\u0438\u043c\u0441\u044f \u043e\u0442 <code><font color=\"#680ea1\">Optional<\/font><\/code> \u0438 \u0434\u043b\u044f \u0434\u0440\u0443\u0433\u0438\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0432 \u043d\u0430\u0448\u0435\u0439 \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445.<br \/>  \u0423 \u043c\u0435\u043d\u044f \u0435\u0441\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442 \u2014 \u0430\u0432\u0438\u0430\u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f <code><font color=\"#680ea1\">Airline<\/font><\/code>, \u0438 \u044f \u0441\u0434\u0435\u043b\u0430\u043b\u0430 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0442\u0435 \u0436\u0435 \u0441\u0430\u043c\u044b\u0435 \u0432\u0435\u0449\u0438, \u0447\u0442\u043e \u0438 \u0434\u043b\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430 <code><font color=\"#680ea1\">Airport<\/font><\/code>:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/ry\/5o\/5h\/ry5o5h4ymrr7tj2kz1bfjllpx6a.png\" data-src=\"https:\/\/habrastorage.org\/webt\/ry\/5o\/5h\/ry5o5h4ymrr7tj2kz1bfjllpx6a.png\"\/><br \/>  <b>&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.. .<\/b><br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/km\/uc\/xc\/kmucxcvwnzdh4k-5dwmk58bqdlo.png\" data-src=\"https:\/\/habrastorage.org\/webt\/km\/uc\/xc\/kmucxcvwnzdh4k-5dwmk58bqdlo.png\"\/><\/p>\n<p>  \u042f \u0445\u043e\u0447\u0443, \u0447\u0442\u043e\u0431\u044b \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 <code><font color=\"#c3178D\">vars<\/font><\/code> <code><font color=\"#680ea1\">code<\/font><\/code>, <code><font color=\"#680ea1\">name<\/font><\/code>, <code><font color=\"#680ea1\">shortname<\/font><\/code> \u0431\u044b\u043b\u0438 \u041d\u0415 <code><font color=\"#680ea1\">Optional<\/font><\/code> \u0438, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f <code><font color=\"#680ea1\">flights<\/font><\/code> \u0431\u044b\u043b\u0430 \u0431\u044b <code><font color=\"#680ea1\">Swift<\/font><\/code> \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e\u043c <code><font color=\"#680ea1\">Set<\/font><\/code>. \u0422\u0430\u043a \u0447\u0442\u043e <code><font color=\"#680ea1\">code<\/font><\/code>, <code><font color=\"#680ea1\">name<\/font><\/code>, <code><font color=\"#680ea1\">shortname<\/font><\/code> \u0438 <code><font color=\"#680ea1\">flights<\/font><\/code>, \u0442\u043e \u0435\u0441\u0442\u044c \u0432\u0441\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u0435 <code><font color=\"#680ea1\">Airline<\/font><\/code>, \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u0442\u044c, \u0434\u043e\u0431\u0430\u0432\u0438\u0432 \u0432 \u043a\u043e\u043d\u0446\u0435 \u0438\u043c\u0435\u043d\u0438 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u043c \u201c\u043f\u043e\u0434\u0447\u0435\u0440\u043a\u0438\u0432\u0430\u043d\u0438\u044f\u201d \u201c<b>_<\/b>\u201d:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/sq\/jb\/ox\/sqjboxualoi4l5cechgp-vyawj0.png\" data-src=\"https:\/\/habrastorage.org\/webt\/sq\/jb\/ox\/sqjboxualoi4l5cechgp-vyawj0.png\"\/><\/p>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0441 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c <code><font color=\"#680ea1\">Flight<\/font><\/code>. <\/p>\n<p>  \u042f \u0445\u043e\u0447\u0443, \u0447\u0442\u043e\u0431\u044b \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 <code><font color=\"#c3178D\">var<\/font><\/code> \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 <code><font color=\"#680ea1\">ident<\/font><\/code>, \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f <code><font color=\"#680ea1\">destination<\/font><\/code>, \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f <code><font color=\"#680ea1\">origin<\/font><\/code>, \u0442\u0438\u043f \u0441\u0430\u043c\u043e\u043b\u0435\u0442\u0430 <code><font color=\"#680ea1\">aircraftType<\/font><\/code> \u0431\u044b\u043b\u0438 \u041d\u0415 <code><font color=\"#680ea1\">Optional<\/font><\/code>: <\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/3q\/1j\/pv\/3q1jpvosl40cy1nfe98ru6qpihy.png\" data-src=\"https:\/\/habrastorage.org\/webt\/3q\/1j\/pv\/3q1jpvosl40cy1nfe98ru6qpihy.png\"\/><br \/>  <b>&#8230;&#8230;&#8230;&#8230;.. .<\/b><br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/g5\/r4\/lu\/g5r4luurbyqgsgjvyphrd6wbsr8.png\" data-src=\"https:\/\/habrastorage.org\/webt\/g5\/r4\/lu\/g5r4luurbyqgsgjvyphrd6wbsr8.png\"\/><\/p>\n<p>  \u2026 a \u0442\u0430\u043a\u0436\u0435 \u0432\u0440\u0435\u043c\u044f \u0432\u0437\u043b\u0435\u0442\u0430 <code><font color=\"#680ea1\">sheduledOff<\/font><\/code> \u0438 \u043f\u043e\u0441\u0430\u0434\u043a\u0438 <code><font color=\"#680ea1\">sheduledOn<\/font><\/code>\u043f\u043e \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0438\u044e, \u043f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u0438\u0431\u044b\u0442\u0438\u044f <code><font color=\"#680ea1\">estimatedOn<\/font><\/code>, \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c <code><font color=\"#680ea1\">filedAirspeed<\/font><\/code>, \u0441\u0442\u0430\u0442\u0443\u0441 <code><font color=\"#680ea1\">state<\/font><\/code>, \u0430\u0432\u0438\u0430\u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f <code><font color=\"#680ea1\">airline<\/font><\/code>: <\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/vs\/ek\/t_\/vsekt_cw3srwiebeowi96gywccg.png\" data-src=\"https:\/\/habrastorage.org\/webt\/vs\/ek\/t_\/vsekt_cw3srwiebeowi96gywccg.png\"\/><\/p>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0432 \u043d\u0430\u0448\u0435\u0439 \u041c\u043e\u0434\u0435\u043b\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 <code><font color=\"#680ea1\">Flight<\/font><\/code> \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0441\u0438\u043c\u0432\u043e\u043b \u201c\u043f\u043e\u0434\u0447\u0435\u0440\u043a\u0438\u0432\u0430\u043d\u0438\u044f\u201d \u201c<b>_<\/b>\u201d \u0432 \u043a\u043e\u043d\u0446\u0435 \u0438\u043c\u0451\u043d \u0432\u0441\u0435\u0445 \u044d\u0442\u0438\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 <code><font color=\"#c3178D\">vars<\/font><\/code> <code><font color=\"#680ea1\">ident<\/font><\/code>, <code><font color=\"#680ea1\">destination<\/font><\/code>, <code><font color=\"#680ea1\">origin<\/font><\/code>, <code><font color=\"#680ea1\">aircraftType<\/font><\/code>, <code><font color=\"#680ea1\">sheduledOff<\/font><\/code>, <code><font color=\"#680ea1\">sheduledOn<\/font><\/code>, <code><font color=\"#680ea1\">estimatedOn<\/font><\/code>, <code><font color=\"#680ea1\">filedAirspeed<\/font><\/code>, <code><font color=\"#680ea1\">state<\/font><\/code>, <code><font color=\"#680ea1\">airline<\/font><\/code>. \u0421\u0430\u043c\u0438 \u0436\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 (\u0431\u0435\u0437 \u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u201c\u043f\u043e\u0434\u0447\u0435\u0440\u043a\u0438\u0432\u0430\u043d\u0438\u044f\u201d) \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u0443 \u043d\u0430\u0441 \u0440\u0430\u0432\u043d\u044f\u0442\u044c\u0441\u044f <code><font color=\"#c3178D\">nil<\/font><\/code>.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/jl\/8h\/6q\/jl8h6qvpefpnbk844-izrai6b1u.png\" data-src=\"https:\/\/habrastorage.org\/webt\/jl\/8h\/6q\/jl8h6qvpefpnbk844-izrai6b1u.png\"\/><\/p>\n<p>  \u042d\u0442\u043e \u0432\u0441\u0451, \u0447\u0442\u043e \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u043b\u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c. \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u0448 <code><font color=\"#680ea1\">SwiftUI<\/font><\/code> \u043a\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u043b\u0443\u0447\u0448\u0435. \u041d\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c, \u0447\u0442\u043e <code><font color=\"#680ea1\">ident<\/font><\/code> \u043d\u0435 \u0440\u0430\u0432\u0435\u043d <code><font color=\"#c3178D\">nil<\/font><\/code>, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 <code><font color=\"#680ea1\">ident<\/font><\/code> \u0440\u0435\u0439\u0441\u0430 <code><font color=\"#680ea1\">Flight<\/font><\/code> \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0440\u0430\u0432\u0435\u043d <code><font color=\"#c3178D\">nil<\/font><\/code>. \u0415\u0441\u043b\u0438 \u0443 \u0440\u0435\u0439\u0441\u0430 <code><font color=\"#680ea1\">Flight<\/font><\/code> \u043d\u0435\u0442 <code><font color=\"#680ea1\">ident<\/font><\/code>, \u0442\u043e, \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438, \u044d\u0442\u043e\u0442 \u0440\u0435\u0439\u0441 \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442.<\/p>\n<p>  \u0422\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0441 \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442\u0430\u043c\u0438 \u043f\u0440\u0438\u0431\u044b\u0442\u0438\u044f <code><font color=\"#680ea1\">destination<\/font><\/code> \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f <code><font color=\"#680ea1\">origin<\/font><\/code>, \u0440\u0435\u0439\u0441\u044b <code><font color=\"#680ea1\">Flight<\/font><\/code> \u043e\u0431\u044f\u0437\u0430\u043d\u044b \u0442\u0430\u043a\u0436\u0435 \u0438\u043c\u0435\u0442\u044c \u043f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435 \u0432\u0440\u0435\u043c\u044f \u0432\u0437\u043b\u0435\u0442\u0430 <code><font color=\"#680ea1\">sheduledOff<\/font><\/code> \u0438 \u043f\u043e\u0441\u0430\u0434\u043a\u0438 <code><font color=\"#680ea1\">sheduledOn<\/font><\/code>\u043f\u043e \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0438\u044e, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u0438\u0431\u044b\u0442\u0438\u044f <code><font color=\"#680ea1\">estimatedOn<\/font><\/code>.<\/p>\n<p>  \u041d\u0443\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043e\u0441\u0442\u043e\u0440\u043e\u0436\u043d\u044b\u043c, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442\u0435 \u0447\u0435\u0440\u0435\u0437 \u044d\u0442\u0443 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044e \u0438\u0437\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043e\u0442 <code><font color=\"#680ea1\">Optional<\/font><\/code> \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445. \u041f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0432\u044b \u0434\u0435\u043b\u0430\u0435\u0442\u0435 \u0432\u044b\u0431\u043e\u0440\u043a\u0443 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code><font color=\"#680ea1\">fetch<\/font><\/code>, \u043a\u0430\u043a \u043c\u044b \u0434\u0435\u043b\u0430\u043b\u0438 \u0432\u044b\u0431\u043e\u0440\u043a\u0443 \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442\u043e\u0432 <code><font color=\"#680ea1\">Airport<\/font><\/code>, \u0442\u043e \u0432 \u043f\u0440\u0435\u0434\u0438\u043a\u0430\u0442\u0435 <code><font color=\"#680ea1\">predicate<\/font><\/code> \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0432\u0435\u0440\u0441\u0438\u044f \u0441 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u043c \u201c\u043f\u043e\u0434\u0447\u0435\u0440\u043a\u0438\u0432\u0430\u043d\u0438\u044f\u201d \u201c<b>_<\/b>\u201d \u2014 <code><font color=\"#680ea1\">icao_<\/font><\/code>:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/05\/vt\/uw\/05vtuw6ldwzvedvzi-cuofw-fn8.png\" data-src=\"https:\/\/habrastorage.org\/webt\/05\/vt\/uw\/05vtuw6ldwzvedvzi-cuofw-fn8.png\"\/><br \/>  <b>&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230; .<\/b><br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/nw\/pz\/uh\/nwpzuhkq6kkcl0qfgper9xtmzue.png\" data-src=\"https:\/\/habrastorage.org\/webt\/nw\/pz\/uh\/nwpzuhkq6kkcl0qfgper9xtmzue.png\"\/><\/p>\n<p>  \u041f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0437\u0430\u043f\u0440\u043e\u0441 <code><font color=\"#680ea1\">request<\/font><\/code> \u0438 \u0435\u0433\u043e \u043f\u0440\u0435\u0434\u0438\u043a\u0430\u0442 <code><font color=\"#680ea1\">predicate<\/font><\/code> \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u043f\u043e \u043f\u043e\u043b\u044f\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0432 \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445, \u0430 \u043d\u0435 \u043f\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c <code><font color=\"#c3178D\">vars<\/font><\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432 \u043d\u0430\u0448\u0435\u043c \u043a\u043e\u0434\u0435. \u042d\u0442\u043e \u0440\u0435\u0430\u043b\u044c\u043d\u0430\u044f \u0432\u044b\u0431\u043e\u0440\u043a\u0430 \u0432 \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0442\u0430\u043c \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0438\u043c\u0435\u043d\u0430 \u043f\u043e\u043b\u0435\u0439 \u0432 \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>  \u0422\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0441 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u0430\u043c\u0438 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 <code><font color=\"#680ea1\">NSSortDescriptor<\/font><\/code>. \u0423 \u043d\u0430\u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f <code><font color=\"#680ea1\">name_<\/font><\/code>, \u0438 \u0435\u0441\u043b\u0438 \u043c\u044b \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442 <code><font color=\"#680ea1\">Airline<\/font><\/code> \u0432 \u041c\u043e\u0434\u0435\u043b\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u0442\u043e \u0443\u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u0442\u0430\u043c \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0438\u043c\u0435\u043d\u043d\u043e <code><font color=\"#680ea1\">name_<\/font><\/code> c \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u043c \u201c\u043f\u043e\u0434\u0447\u0435\u0440\u043a\u0438\u0432\u0430\u043d\u0438\u044f\u201d \u201c<b>_<\/b>\u201d:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/wt\/nv\/fi\/wtnvfimbsqa8qg-li6zm-6trsqy.png\" data-src=\"https:\/\/habrastorage.org\/webt\/wt\/nv\/fi\/wtnvfimbsqa8qg-li6zm-6trsqy.png\"\/><br \/>  <b>&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.. .<\/b><br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/q5\/c2\/gb\/q5c2gbfm1kcoj9yz2u01qylwdpa.png\" data-src=\"https:\/\/habrastorage.org\/webt\/q5\/c2\/gb\/q5c2gbfm1kcoj9yz2u01qylwdpa.png\"\/><\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0443 \u043d\u0430\u0441 \u043d\u0435\u0442 \u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u201c\u043f\u043e\u0434\u0447\u0435\u0440\u043a\u0438\u0432\u0430\u043d\u0438\u044f\u201d \u201c<b>_<\/b>\u201d \u0432 \u041c\u043e\u0434\u0435\u043b\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u0435\u0433\u043e \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0438 \u0432 \u043f\u0440\u0435\u0434\u0438\u043a\u0430\u0442\u0435 <code><font color=\"#680ea1\">predicate<\/font><\/code>, \u0438 \u0432 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0435 <code><font color=\"#680ea1\">NSSortDescriptors<\/font><\/code>. <\/p>\n<p>  \u0418\u0442\u0430\u043a, \u043c\u044b \u043d\u0430\u0434\u0435\u043b\u0438\u043b\u0438 \u043d\u0430\u0448\u0438 \u043a\u043b\u0430\u0441\u0441\u044b class <code><font color=\"#680ea1\">Airport<\/font><\/code>, <code><font color=\"#680ea1\">Airline<\/font><\/code> \u0438 <code><font color=\"#680ea1\">Flight<\/font><\/code> \u043c\u043d\u043e\u0433\u0438\u043c\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u043c\u0438, \u043d\u043e \u043f\u043e\u043a\u0430 \u0443 \u043d\u0430\u0441 \u043d\u0435\u0442 \u0441\u0430\u043c\u043e\u0433\u043e \u0433\u043b\u0430\u0432\u043d\u043e\u0433\u043e \u2014 \u0437\u0430\u043f\u0438\u0441\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 <a href=\"https:\/\/ru.flightaware.com\/\" rel=\"nofollow noopener noreferrer\">FlightAware<\/a> \u0432 <code><font color=\"#680ea1\">Core Data<\/font><\/code>. <\/p>\n<h2>\u0417\u0430\u043f\u0438\u0441\u044c FlightAware \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 <font color=\"#680ea1\">Core Data<\/font>.<\/h2>\n<p>  \u041d\u043e \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430\u0436\u043d\u043e \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u0444\u0430\u0439\u043b\u0430 \u0441 <code>JSON<\/code> \u0434\u0430\u043d\u043d\u044b\u043c\u0438. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u041c\u043e\u0434\u0435\u043b\u044c \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c\u043e\u0439 \u0438\u0437 \u0441\u0435\u0440\u0432\u0438\u0441\u0430 <a href=\"https:\/\/ru.flightaware.com\/\" rel=\"nofollow noopener noreferrer\">FlightAware<\/a>. \u042d\u0442\u043e \u0442\u0435 \u0436\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b: \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442 <code><font color=\"#680ea1\">AirportInfo<\/font><\/code>, \u0430\u0432\u0438\u0430\u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f <code><font color=\"#680ea1\">AirlineInfo<\/font><\/code> \u0438 \u0440\u0435\u0439\u0441\u044b <code><font color=\"#680ea1\">FlightsInfo<\/font><\/code>, \u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0435 \u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435 <code>JSON<\/code> \u0434\u0430\u043d\u043d\u044b\u0445:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/et\/h6\/pc\/eth6pcdb24lthpwcvtzjkcouww4.png\" data-src=\"https:\/\/habrastorage.org\/webt\/et\/h6\/pc\/eth6pcdb24lthpwcvtzjkcouww4.png\"\/><br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/wu\/q5\/ku\/wuq5kux0uhceqwwnoff_z4tbt0s.png\" data-src=\"https:\/\/habrastorage.org\/webt\/wu\/q5\/ku\/wuq5kux0uhceqwwnoff_z4tbt0s.png\"\/><\/p>\n<p>  \u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u0440\u0435\u0439\u0441\u0430\u0445 \u0432 \u0441\u0435\u0440\u0432\u0438\u0441\u0435 <a href=\"https:\/\/ru.flightaware.com\/\" rel=\"nofollow noopener noreferrer\">FlightAware<\/a> \u0432\u044b\u0434\u0430\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442\u0430 \u043f\u043e \u0433\u0440\u0443\u043f\u043f\u0430\u043c: \u043f\u0440\u0438\u0431\u044b\u0432\u0448\u0438\u0435 <code><font color=\"#680ea1\">arrivals<\/font><\/code>, \u0432\u044b\u043b\u0435\u0442\u0435\u0432\u0448\u0438\u0435 <code><font color=\"#680ea1\">departures<\/font><\/code>, \u043f\u0440\u0438\u0431\u044b\u0432\u0430\u044e\u0449\u0438\u0435 \u043f\u043e \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0438\u044e <code><font color=\"#680ea1\">scheduledArrivals<\/font><\/code>, \u0432\u044b\u043b\u0435\u0442\u0430\u044e\u0449\u0438\u0435 \u043f\u043e \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0438\u044e <code><font color=\"#680ea1\">scheduledDepartures<\/font><\/code>:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/2o\/fn\/cv\/2ofncvvx3g82uudvcrygenz66z4.png\" data-src=\"https:\/\/habrastorage.org\/webt\/2o\/fn\/cv\/2ofncvvx3g82uudvcrygenz66z4.png\"\/><\/p>\n<p>  \u0412\u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u043d\u043e\u0441\u0442\u0438 \u043a \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u0433\u0440\u0443\u043f\u043f\u0435, \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u0440\u0435\u0439\u0441\u0430\u0445 \u0432\u044b\u0434\u0430\u0435\u0442\u0441\u044f \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u0430\u044f, \u043e\u043d\u0430 \u0441\u043a\u043e\u043c\u043f\u043e\u043d\u043e\u0432\u0430\u043d\u0430 \u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 <code><font color=\"#c3178D\">struct<\/font><\/code> <code><font color=\"#680ea1\">Arrival<\/font><\/code>:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/09\/un\/ix\/09unix7nomxvdxslesolz9rson0.png\" data-src=\"https:\/\/habrastorage.org\/webt\/09\/un\/ix\/09unix7nomxvdxslesolz9rson0.png\"\/><\/p>\n<p>  \u041c\u044b \u0447\u0438\u0442\u0430\u0435\u043c <code>JSON<\/code> \u0444\u0430\u0439\u043b\u044b \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e <b>API<\/b> \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 <code><font color=\"#680ea1\">Combine<\/font><\/code> \u0438 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0433\u043e \u0434\u0435\u043a\u043e\u0434\u0435\u0440\u0430 <code><font color=\"#680ea1\">jsonDecoder<\/font><\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0434\u0430\u0442\u044b \u0438 \u0432\u0440\u0435\u043c\u044f \u0432 <b>ISO8601<\/b> \u0444\u043e\u0440\u043c\u0430\u0442\u0435, a \u0442\u0430\u043a\u0436\u0435 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u043c\u0435\u043d \u0438\u0437 \u0444\u043e\u0440\u043c\u0430\u0442\u0430 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/Snake_case\" rel=\"nofollow noopener noreferrer\">Snake case<\/a>. \u041a\u043e\u0434 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d \u0432 \u0444\u0430\u0439\u043b\u0435 <b><i>FromJSONAPI.swift<\/i><\/b> \u2026<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/73\/rj\/pj\/73rjpjldo95nc-lonjmcokonxaw.png\" data-src=\"https:\/\/habrastorage.org\/webt\/73\/rj\/pj\/73rjpjldo95nc-lonjmcokonxaw.png\"\/><\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/qh\/qp\/-y\/qhqp-ycekqcnnu7v9ksas-bv33m.png\" data-src=\"https:\/\/habrastorage.org\/webt\/qh\/qp\/-y\/qhqp-ycekqcnnu7v9ksas-bv33m.png\"\/><\/p>\n<p>  \u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u044d\u0442\u043e\u0433\u043e API \u043c\u044b \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u043e\u0431 \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442\u0430\u0445 <code><font color=\"#680ea1\">[AirportInfo]<\/font><\/code> \u0438\u0437 \u0444\u0430\u0439\u043b\u0430 \u0441 \u0438\u043c\u0435\u043d\u0435\u043c <b>AIRPORTS.json<\/b> \u0438 \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u0435\u043c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code><font color=\"#680ea1\">update<\/font><\/code> \u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u0445 <code><font color=\"#680ea1\">Core Data<\/font><\/code> \u0441 \u0438\u043c\u0435\u043d\u0435\u043c <code><font color=\"#680ea1\">Airport<\/font><\/code>:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/xx\/hk\/--\/xxhk--cv9un37pgxjhqjw969vay.png\" data-src=\"https:\/\/habrastorage.org\/webt\/xx\/hk\/--\/xxhk--cv9un37pgxjhqjw969vay.png\"\/><\/p>\n<p>  \u0421\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u043e\u0431 \u0430\u0432\u0438\u0430\u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f\u0445 <code><font color=\"#680ea1\">[AirlineInfo]<\/font><\/code> \u0438\u0437 \u0444\u0430\u0439\u043b\u0430 <b>AIRLINES.json<\/b> \u0438 \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u0435\u043c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u0432\u043e\u0435\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code><font color=\"#680ea1\">update<\/font><\/code> \u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u0445 <code><font color=\"#680ea1\">Core Data<\/font><\/code> \u0441 \u0438\u043c\u0435\u043d\u0435\u043c <code><font color=\"#680ea1\">Airline<\/font><\/code>:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/t6\/en\/s8\/t6ens8hxnqubmjuzbtnsugmsrwc.png\" data-src=\"https:\/\/habrastorage.org\/webt\/t6\/en\/s8\/t6ens8hxnqubmjuzbtnsugmsrwc.png\"\/><\/p>\n<p>  \u0421\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u0440\u0435\u0439\u0441\u0430\u0445 <code><font color=\"#680ea1\">FlightInfo<\/font><\/code> \u0438\u0437 \u0444\u0430\u0439\u043b\u0430 <b>SFO.json<\/b>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0432\u043f\u043e\u043b\u043d\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u043c\u0443 \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442\u0443, \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 SFO (San Francisco Int ), \u0438 \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u0435\u043c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u0432\u043e\u0435\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code><font color=\"#680ea1\">update<\/font><\/code> \u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u0445 <code><font color=\"#680ea1\">Core Data<\/font><\/code> \u0441 \u0438\u043c\u0435\u043d\u0435\u043c <code><font color=\"#680ea1\">Flight<\/font><\/code>.<\/p>\n<p>  \u0412 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 <a href=\"https:\/\/ru.flightaware.com\/\" rel=\"nofollow noopener noreferrer\">FlightAware<\/a> \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e\u0431 \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442\u0430\u0445 \u0438 \u0430\u0432\u0438\u0430\u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f\u0445, \u0441\u043e\u0441\u0440\u0435\u0434\u043e\u0442\u043e\u0447\u0435\u043d\u043d\u044b\u0445 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u0430\u0445, \u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u0440\u0435\u0439\u0441\u0430\u0445, \u043f\u0440\u0438\u0431\u044b\u0432\u0448\u0438\u0445 <code><font color=\"#680ea1\">arrivals<\/font><\/code>, \u043f\u043e\u043a\u0438\u043d\u0443\u0432\u0448\u0438\u0445 <code><font color=\"#680ea1\">departures<\/font><\/code>, \u043f\u0440\u0438\u0431\u044b\u0432\u0430\u044e\u0449\u0438\u0445 \u043f\u043e \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0438\u044e <code><font color=\"#680ea1\">scheduledArrivals<\/font><\/code> \u0438 \u0443\u0431\u044b\u0432\u0430\u044e\u0449\u0438\u0445 \u043f\u043e \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0438\u044e <code><font color=\"#680ea1\">scheduledDepartures<\/font><\/code>, \u0441\u043e\u0441\u0440\u0435\u0434\u043e\u0442\u043e\u0447\u0435\u043d\u044b \u0432 \u0444\u0430\u0439\u043b\u0430\u0445 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u043c \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442\u0430\u043c:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/d1\/xg\/ti\/d1xgti5ji4g5eztiu-g1btllzoy.png\" data-src=\"https:\/\/habrastorage.org\/webt\/d1\/xg\/ti\/d1xgti5ji4g5eztiu-g1btllzoy.png\"\/><\/p>\n<p>  \u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 <a href=\"https:\/\/ru.flightaware.com\/\" rel=\"nofollow noopener noreferrer\">FlightAware<\/a> \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0432 <code><font color=\"#680ea1\">Core Data<\/font><\/code> \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043b\u0430\u0441\u0441\u0430 <code><font color=\"#c3178D\">class<\/font><\/code> <code><font color=\"#680ea1\">LoadFlights<\/font><\/code> \u0438 \u0435\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430 <code><font color=\"#680ea1\">load()<\/font><\/code> \u0438\u0437 \u0444\u0430\u0439\u043b\u043e\u0432 \u0441 \u0438\u043c\u0435\u043d\u0430\u043c\u0438 <b>AIRPORT.json<\/b>, <b>AIRLINE.json <\/b>\u0438 <b>SFO.json<\/b>: <\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/fj\/01\/fl\/fj01flg5p8zlbcoinfw4b184vsa.png\" data-src=\"https:\/\/habrastorage.org\/webt\/fj\/01\/fl\/fj01flg5p8zlbcoinfw4b184vsa.png\"\/><\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043e\u043f\u044f\u0442\u044c \u0432\u0435\u0440\u043d\u0435\u043c\u0441\u044f \u043a \u043a\u043b\u0430\u0441\u0441\u0430\u043c <code><font color=\"#c3178D\">class<\/font><\/code> \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 <code><font color=\"#680ea1\">Core Data<\/font><\/code>, \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u0434\u043b\u044f \u043d\u0430\u0441 <code>Xcode<\/code>, \u0438 \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u043c \u0442\u0430\u043c <code><font color=\"#c3178D\">static<\/font><\/code> \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code><font color=\"#c3178D\">func<\/font><\/code> <code><font color=\"#680ea1\">update<\/font><\/code> \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438 <a href=\"https:\/\/ru.flightaware.com\/\" rel=\"nofollow noopener noreferrer\">FlightAware<\/a> \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b <code><font color=\"#680ea1\">Core Data<\/font><\/code>. <\/p>\n<p>  \u0412\u043e\u0442 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 <code><font color=\"#c3178D\">extension<\/font><\/code> \u043a\u043b\u0430\u0441\u0441\u0430 <code><font color=\"#c3178D\">class<\/font><\/code> <code><font color=\"#680ea1\">Airport<\/font><\/code> \u0441 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 <code><font color=\"#680ea1\">update<\/font><\/code>, \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0435\u0439 <code><font color=\"#680ea1\">AirportInfo<\/font><\/code> \u0432 <code><font color=\"#680ea1\">Core Data<\/font><\/code>:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/05\/vt\/uw\/05vtuw6ldwzvedvzi-cuofw-fn8.png\" data-src=\"https:\/\/habrastorage.org\/webt\/05\/vt\/uw\/05vtuw6ldwzvedvzi-cuofw-fn8.png\"\/><br \/>  <b>&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230; .<\/b><br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/rh\/zs\/_r\/rhzs_rbt_gnghdoaly4nfpshng0.png\" data-src=\"https:\/\/habrastorage.org\/webt\/rh\/zs\/_r\/rhzs_rbt_gnghdoaly4nfpshng0.png\"\/><\/p>\n<p>  \u0412\u043e\u0442 \u043b\u043e\u0433\u0438\u043a\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u044d\u0442\u043e\u0433\u043e \u043a\u043e\u0434\u0430. \u0415\u0441\u043b\u0438 \u043d\u0430\u043c \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043a\u043e\u0434 \u0410\u044d\u0440\u043e\u043f\u043e\u0440\u0442\u0430 <code><font color=\"#680ea1\">icao<\/font><\/code> \u0438\u0437 <a href=\"https:\/\/ru.flightaware.com\/\" rel=\"nofollow noopener noreferrer\">FlightAware<\/a> \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 <code><font color=\"#680ea1\">info<\/font><\/code>, \u0442\u043e \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043a\u0430\u0442\u044c \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442 <code><font color=\"#680ea1\">airport<\/font><\/code> \u0441 \u044d\u0442\u0438\u043c \u043a\u043e\u0434\u043e\u043c <code><font color=\"#680ea1\">icao<\/font><\/code> \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code><font color=\"#c3178D\">func<\/font><\/code> <code><font color=\"#680ea1\">withICAO<\/font><\/code>, \u043d\u0430\u0445\u043e\u0434\u044f\u0449\u0435\u0439\u0441\u044f \u0432 \u0442\u043e\u043c \u0436\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0438 <code><font color=\"#c3178D\">extension<\/font><\/code> \u043a\u043b\u0430\u0441\u0441\u0430 <code><font color=\"#c3178D\">class<\/font><\/code> <code><font color=\"#680ea1\">Airport<\/font><\/code>. \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u043f\u0440\u0438 \u0432\u044b\u0431\u043e\u0440\u043a\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 <code><font color=\"#680ea1\">Core Data<\/font><\/code> \u0432 \u043f\u0440\u0435\u0434\u0438\u043a\u0430\u0442\u0435 \u043c\u044b \u0432\u0441\u0435\u0433\u0434\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0438\u043c\u044f <code><font color=\"#680ea1\">icao_<\/font><\/code> \u0441 \u201c\u043f\u043e\u0434\u0447\u0435\u0440\u043a\u0438\u0432\u0430\u043d\u0438\u0435\u043c\u201d \u201c<b>_<\/b>\u201d, \u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u041d\u0415-<code><font color=\"#680ea1\">Optional<\/font><\/code> \u0430\u0442\u0440\u0438\u0431\u0443\u0442:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/_s\/ed\/0r\/_sed0refwcdt0vjhl3o9iscxx1a.png\" data-src=\"https:\/\/habrastorage.org\/webt\/_s\/ed\/0r\/_sed0refwcdt0vjhl3o9iscxx1a.png\"\/><\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0432 <code><font color=\"#680ea1\">Core Data<\/font><\/code> \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442 <code><font color=\"#680ea1\">airport<\/font><\/code> \u0441 \u044d\u0442\u0438\u043c \u043a\u043e\u0434\u043e\u043c <code><font color=\"#680ea1\">icao<\/font><\/code>, \u0442\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u0435\u0433\u043e \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code><font color=\"#680ea1\">update<\/font><\/code>, \u0435\u0441\u043b\u0438 \u043d\u0435\u0442, \u0442\u043e \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043d\u043e\u0432\u044b\u0439 \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442 <code><font color=\"#680ea1\">airport<\/font><\/code> \u0441 \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u043c \u0432 <a href=\"https:\/\/ru.flightaware.com\/\" rel=\"nofollow noopener noreferrer\">FlightAware<\/a> \u043a\u043e\u0434\u043e\u043c \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442\u0430 <code><font color=\"#680ea1\">icao<\/font><\/code> \u0438 \u0442\u0430\u043a\u0436\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u0435\u0433\u043e \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code><font color=\"#680ea1\">update<\/font><\/code> \u0434\u043b\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432.<\/p>\n<p>  \u041f\u043e\u043a\u0430 \u043c\u044b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0438 \u043d\u0435 \u0432\u0441\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 <code><font color=\"#c3178D\">var<\/font><\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0435\u0441\u0442\u044c \u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u0435 <code><font color=\"#680ea1\">Airport<\/font><\/code>.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u044f \u0432\u0435\u0440\u043d\u0443\u0441\u044c \u0432 \u041c\u043e\u0434\u0435\u043b\u044c \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0432\u0437\u0433\u043b\u044f\u043d\u0443 \u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442 <code><font color=\"#680ea1\">Airport<\/font><\/code>, \u0442\u043e \u0443\u0432\u0438\u0436\u0443 \u0432\u0441\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0438, \u043a\u0440\u043e\u043c\u0435 \u0434\u0432\u0443\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 <code><font color=\"#c3178D\">var<\/font><\/code> <code><font color=\"#680ea1\">flightsFrom<\/font><\/code> \u0438 <code><font color=\"#680ea1\">flightsTo<\/font><\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0441\u043e\u0431\u043e\u0439 \u0432\u0437\u0430\u0438\u043c\u043e\u0441\u0432\u044f\u0437\u0438 \u0441 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c <code><font color=\"#680ea1\">Flight<\/font><\/code>:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/4m\/i9\/jl\/4mi9jle0ytvufloiudwewa2ylkw.png\" data-src=\"https:\/\/habrastorage.org\/webt\/4m\/i9\/jl\/4mi9jle0ytvufloiudwewa2ylkw.png\"\/><\/p>\n<p>  \u041c\u044b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c \u0438\u0445 \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u0440\u0435\u0439\u0441\u0430 <code><font color=\"#680ea1\">Flight<\/font><\/code>, \u043a\u043e\u0433\u0434\u0430 \u0431\u0443\u0434\u0435\u043c \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0440\u0435\u0439\u0441\u0435 <code><font color=\"#680ea1\">Flight<\/font><\/code> \u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442\u044b <code><font color=\"#680ea1\">Airport<\/font><\/code> \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f <code><font color=\"#680ea1\">destination<\/font><\/code> \u0438 \u043f\u0440\u0438\u0431\u044b\u0442\u0438\u044f <code><font color=\"#680ea1\">origin<\/font><\/code>.<\/p>\n<p>  \u0423 \u043a\u043b\u0430\u0441\u0441\u0430 <code><font color=\"#c3178D\">class<\/font><\/code> \u0440\u0435\u0439\u0441 <code><font color=\"#680ea1\">Flight<\/font><\/code> \u0435\u0441\u0442\u044c \u0441\u0432\u043e\u044f <code><font color=\"#c3178D\">static<\/font><\/code> \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code><font color=\"#c3178D\">func<\/font><\/code> <code><font color=\"#680ea1\">update<\/font><\/code> \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 <code><font color=\"#680ea1\">FlightInfo<\/font><\/code> <a href=\"https:\/\/ru.flightaware.com\/\" rel=\"nofollow noopener noreferrer\">FlightAware<\/a> \u0432 <code><font color=\"#680ea1\">Core Data<\/font><\/code>:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/05\/vt\/uw\/05vtuw6ldwzvedvzi-cuofw-fn8.png\" data-src=\"https:\/\/habrastorage.org\/webt\/05\/vt\/uw\/05vtuw6ldwzvedvzi-cuofw-fn8.png\"\/><br \/>  <b>&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230; .<\/b><br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/gw\/3r\/ar\/gw3raradx1ikc90ll-pgfinhx28.png\" data-src=\"https:\/\/habrastorage.org\/webt\/gw\/3r\/ar\/gw3raradx1ikc90ll-pgfinhx28.png\"\/><\/p>\n<p>  \u0412 \u044d\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043c\u044b \u0442\u0430\u043a\u0436\u0435, \u043a\u0430\u043a \u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442\u0430\u043c\u0438 <code><font color=\"#680ea1\">Airport<\/font><\/code>, \u0438\u0449\u0435\u043c \u0440\u0435\u0439\u0441 <code><font color=\"#680ea1\">flight<\/font><\/code> \u0441 \u043d\u0443\u0436\u043d\u044b\u043c \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u043c <code><font color=\"#680ea1\">ident_<\/font><\/code> (\u043c\u044b \u0432\u0441\u0435\u0433\u0434\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0438\u043c\u044f \u0441 \u201c\u043f\u043e\u0434\u0447\u0435\u0440\u043a\u0438\u0432\u0430\u043d\u0438\u0435\u043c\u201d \u201c_\u201d ). \u041d\u0430\u0445\u043e\u0434\u0438\u043c \u0432 <code><font color=\"#680ea1\">Core Data<\/font><\/code> \u044d\u0442\u043e\u0442 \u0440\u0435\u0439\u0441 \u0438\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043d\u043e\u0432\u044b\u0439 \u0440\u0435\u0439\u0441 <code><font color=\"#680ea1\">Flight (context:context)<\/font><\/code>. \u0412 \u043b\u044e\u0431\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c \u0435\u0433\u043e \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439 \u0438\u0437 <a href=\"https:\/\/ru.flightaware.com\/\" rel=\"nofollow noopener noreferrer\">FlightAware<\/a>. \u041d\u0443, \u0430 \u0434\u0430\u043b\u0435\u0435 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0443\u0436\u0435 \u0432\u0438\u0434\u0435\u043b\u0438 \u043f\u0440\u0435\u0436\u0434\u0435.<\/p>\n<p>  \u041f\u0430\u0440\u0430 \u2014 \u0442\u0440\u043e\u0439\u043a\u0430 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0445 \u0432\u0435\u0449\u0435\u0439 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0437\u0434\u0435\u0441\u044c, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e, \u043a\u043e\u0433\u0434\u0430 \u044f \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u044e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 <code><font color=\"#c3178D\">var<\/font><\/code> \u201c\u0432\u0437\u0430\u0438\u043c\u043e\u0441\u0432\u044f\u0437\u0435\u0439\u201d. \u0417\u0434\u0435\u0441\u044c \u044f \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u044e \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f <code><font color=\"#680ea1\">origin<\/font><\/code> \u0438 \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f <code><font color=\"#680ea1\">destination<\/font><\/code> \u0441 \u0442\u0435\u043c\u0438 \u043a\u043e\u0434\u0430\u043c\u0438 <code><font color=\"#680ea1\">icao<\/font><\/code>, \u043a\u0430\u043a\u0438\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u044b \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0440\u0435\u0439\u0441\u0430, \u043f\u0443\u0442\u0435\u043c \u043f\u043e\u0438\u0441\u043a\u0430 \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u0432 <code><font color=\"#680ea1\">Core Data<\/font><\/code> \u0438\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442\u0430 <code><font color=\"#680ea1\">Airport<\/font><\/code>. \u0422\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u043c\u044b \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c \u201c\u0432\u0437\u0430\u0438\u043c\u043e\u0441\u0432\u044f\u0437\u0438\u201d <code><font color=\"#680ea1\">Flight - Airport<\/font><\/code> \u0432 \u0432\u0438\u0434\u0435 <code><font color=\"#680ea1\">origin_<\/font><\/code> \u0438 <code><font color=\"#680ea1\">destination_<\/font><\/code>:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/6e\/r_\/rz\/6er_rznsqsweeu4u8sig1kbduja.png\" data-src=\"https:\/\/habrastorage.org\/webt\/6e\/r_\/rz\/6er_rznsqsweeu4u8sig1kbduja.png\"\/><\/p>\n<p>  \u2026 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442\u0430 <code><font color=\"#680ea1\">Airport - Flight<\/font><\/code> \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u044e\u0442\u0441\u044f \u0432 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u044e\u0449\u0438\u0435 \u201c\u0432\u0437\u0430\u0438\u043c\u043e\u0441\u0432\u044f\u0437\u0438\u201d <code><font color=\"#680ea1\">flightsTo_<\/font><\/code> \u0438 <code><font color=\"#680ea1\">flightsFrom_<\/font><\/code> \u0434\u043b\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442 <code><font color=\"#680ea1\">Airport<\/font><\/code>. \u0412\u0441\u0435 \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438.<\/p>\n<p>  \u0422\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0441 \u201c\u0432\u0437\u0430\u0438\u043c\u043e\u0441\u0432\u044f\u0437\u044c\u044e\u201d c \u0430\u0432\u0438\u0430\u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0435\u0439 <code><font color=\"#680ea1\">Airline- Flight<\/font><\/code>. \u0412 <a href=\"https:\/\/ru.flightaware.com\/\" rel=\"nofollow noopener noreferrer\">FlightAware<\/a> \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u0440\u0435\u0439\u0441\u0435 <code><font color=\"#680ea1\">faflight<\/font><\/code> \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u0434 \u0430\u0432\u0438\u0430\u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 <code><font color=\"#680ea1\">airlineCode<\/font><\/code>. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0435\u0433\u043e \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code><font color=\"#c3178D\"> func<\/font><\/code> <code><font color=\"#680ea1\">Airline.withCode<\/font><\/code> \u043c\u044b \u043d\u0430\u0445\u043e\u0434\u0438\u043c \u043d\u0443\u0436\u043d\u0443\u044e \u0430\u0432\u0438\u0430\u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044e \u0432 <code><font color=\"#680ea1\">Core Data<\/font><\/code> \u0438\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043d\u043e\u0432\u0443\u044e \u0430\u0432\u0438\u0430\u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044e <code><font color=\"#680ea1\">airline_<\/font><\/code> \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u0440\u0435\u0439\u0441\u0430 <code><font color=\"#680ea1\">Flight<\/font><\/code>:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/bo\/ij\/kw\/boijkwe8bdrdbrqwvuisuktlwe8.png\" data-src=\"https:\/\/habrastorage.org\/webt\/bo\/ij\/kw\/boijkwe8bdrdbrqwvuisuktlwe8.png\"\/><\/p>\n<p>  \u0422\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u043c\u044b \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c \u201c\u0432\u0437\u0430\u0438\u043c\u043e\u0441\u0432\u044f\u0437\u044c\u201d <code><font color=\"#680ea1\">Flight - Airline<\/font><\/code> \u0432 \u0432\u0438\u0434\u0435 <code><font color=\"#680ea1\">airline_<\/font><\/code>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u0430\u0432\u0438\u0430\u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 <code><font color=\"#680ea1\">Airline<\/font><\/code> \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u044e\u0449\u0443\u044e \u201c\u0432\u0437\u0430\u0438\u043c\u043e\u0441\u0432\u044f\u0437\u044c\u201d <code><font color=\"#680ea1\">flights_<\/font><\/code>. <\/p>\n<p>  \u0423 \u043a\u043b\u0430\u0441\u0441\u0430 <code><font color=\"#c3178D\">class<\/font><\/code> \u0430\u0432\u0438\u0430\u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 <code><font color=\"#680ea1\">Airline<\/font><\/code> \u0435\u0441\u0442\u044c \u0441\u0432\u043e\u044f <code><font color=\"#c3178D\">static<\/font><\/code> \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code><font color=\"#c3178D\">func<\/font><\/code> <code><font color=\"#680ea1\">update<\/font><\/code> \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438 <a href=\"https:\/\/ru.flightaware.com\/\" rel=\"nofollow noopener noreferrer\">FlightAware<\/a> \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 <code><font color=\"#680ea1\">AirlineInfo<\/font><\/code> \u0432 <code><font color=\"#680ea1\">Core Data<\/font><\/code>:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/w9\/dt\/6s\/w9dt6sdjyr-dftomidkiwldgxu4.png\" data-src=\"https:\/\/habrastorage.org\/webt\/w9\/dt\/6s\/w9dt6sdjyr-dftomidkiwldgxu4.png\"\/><\/p>\n<p>  \u0412 \u044d\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043c\u044b \u0442\u0430\u043a\u0436\u0435, \u043a\u0430\u043a \u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442\u0430\u043c\u0438 <code><font color=\"#680ea1\">Airport<\/font><\/code>, \u0438\u0449\u0435\u043c \u0430\u0432\u0438\u0430\u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044e \u0441 \u043d\u0443\u0436\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c <code><font color=\"#680ea1\">code_<\/font><\/code> (\u043c\u044b \u0432\u0441\u0435\u0433\u0434\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0438\u043c\u044f \u0441 \u201c\u043f\u043e\u0434\u0447\u0435\u0440\u043a\u0438\u0432\u0430\u043d\u0438\u0435\u043c\u201d \u201c_\u201d ). \u041d\u0430\u0445\u043e\u0434\u0438\u043c \u0432 <code><font color=\"#680ea1\">Core Data<\/font><\/code> \u044d\u0442\u0443 \u0430\u0432\u0438\u0430\u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044e \u0438\u043b\u0438, \u0435\u0441\u043b\u0438 \u043e\u043d\u0430 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442. \u0442\u043e \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043d\u043e\u0432\u0443\u044e \u0430\u0432\u0438\u0430\u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044e <code><font color=\"#680ea1\">Airline (context:context)<\/font><\/code>, a \u0437\u0430\u0442\u0435\u043c \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c \u0435\u0451 \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439 \u0438\u0437 <a href=\"https:\/\/ru.flightaware.com\/\" rel=\"nofollow noopener noreferrer\">FlightAware<\/a>.<\/p>\n<h2>\u0418\u041d\u0422\u0415\u0420\u0424\u0415\u0419\u0421 \u0432 <font color=\"#680ea1\">SwiftUI<\/font>.<\/h2>\n<p>  \u0418\u0442\u0430\u043a, \u0434\u0430\u043d\u043d\u044b\u0435 \u0437\u0430\u043a\u0430\u0447\u0435\u043d\u044b \u0432 <code><font color=\"#680ea1\">Core Data<\/font><\/code>. \u041f\u0440\u0438\u0448\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c<b> UI<\/b> \u0432 <code><font color=\"#680ea1\">SwiftUI<\/font><\/code>.<\/p>\n<p>  \u0412 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0431\u0443\u0434\u0435\u0442 \u0444\u0430\u0439\u043b <i>Persistence.swift<\/i> \u0441 \u0442\u043e\u0447\u043d\u043e \u0442\u0430\u043a\u043e\u0439 \u0436\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439 <code><font color=\"#c3178D\">struct<\/font><\/code> <code><font color=\"#680ea1\">PersistenceController<\/font><\/code>, \u043a\u0430\u043a \u0438 \u0432 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c \u0448\u0430\u0431\u043b\u043e\u043d\u043d\u043e\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/cw\/ny\/yb\/cwnyyb5uutbbj7gxp2ptahqi8w4.png\" data-src=\"https:\/\/habrastorage.org\/webt\/cw\/ny\/yb\/cwnyyb5uutbbj7gxp2ptahqi8w4.png\"\/><\/p>\n<p>  \u0422\u0430\u043c \u043d\u0435\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <code><font color=\"#c3178D\">var<\/font><\/code> <code><font color=\"#680ea1\">preview<\/font><\/code>, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 <b>Preview<\/b> \u0438 \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u0448\u0430\u0431\u043b\u043e\u043d\u0435, \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e <code> <font color=\"#680ea1\">View<\/font><\/code>.<\/p>\n<p>  \u0423 \u043d\u0430\u0441 \u0431\u0443\u0434\u0435\u0442 \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0444\u0430\u0439\u043b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f <i>CoreDataFlightsApp.swift<\/i>:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/iw\/q8\/ia\/iwq8iaa3hvfyqekmkoelbf1vvis.png\" data-src=\"https:\/\/habrastorage.org\/webt\/iw\/q8\/ia\/iwq8iaa3hvfyqekmkoelbf1vvis.png\"\/><\/p>\n<p>  \u0422\u043e\u043f\u043e\u0432\u043e\u0435 <code><font color=\"#680ea1\">HomeView<\/font><\/code> \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u044b \u0441 <code><font color=\"#680ea1\">Core Data<\/font><\/code> \u0434\u0430\u043d\u043d\u044b\u043c\u0438: \u0441\u043e \u0441\u043f\u0438\u0441\u043a\u043e\u043c \u0440\u0435\u0439\u0441\u043e\u0432 <code><font color=\"#680ea1\">FlightsView<\/font><\/code>, \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442\u043e\u0432 <code><font color=\"#680ea1\">AirportsView<\/font><\/code> \u0438 \u0430\u0432\u0438\u0430\u043b\u0438\u043d\u0438\u0439 <code><font color=\"#680ea1\">AirlinesView<\/font><\/code>:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/zd\/ow\/jh\/zdowjhrxxrgxrqbujpepucckeku.png\" data-src=\"https:\/\/habrastorage.org\/webt\/zd\/ow\/jh\/zdowjhrxxrgxrqbujpepucckeku.png\"\/><\/p>\n<h2>\u0410\u042d\u0420\u041e\u041f\u041e\u0420\u0422\u042b <font color=\"#680ea1\">AirportsView<\/font><\/h2>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 <code><font color=\"#680ea1\">View<\/font><\/code> \u0438 \u043d\u0430\u0447\u043d\u0435\u043c \u0441 <code><font color=\"#680ea1\">AirportsView<\/font><\/code>:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/jf\/7e\/ky\/jf7ekyr8ke1-mssxjg3ucfkowsq.png\" data-src=\"https:\/\/habrastorage.org\/webt\/jf\/7e\/ky\/jf7ekyr8ke1-mssxjg3ucfkowsq.png\"\/><\/p>\n<p>  \u041d\u0430\u0448 <code><font color=\"#680ea1\">View<\/font><\/code> \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430 \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442\u043e\u0432 <code><font color=\"#680ea1\">airports<\/font><\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code><font color=\"#680ea1\">@FetchRequest<\/font><\/code>:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/hg\/hy\/ny\/hghynyd2kyxkebazvngygfihbkg.png\" data-src=\"https:\/\/habrastorage.org\/webt\/hg\/hy\/ny\/hghynyd2kyxkebazvngygfihbkg.png\"\/><\/p>\n<p>  \u2026 \u0438 \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 <code><font color=\"#680ea1\">query<\/font><\/code>:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/x0\/4i\/d7\/x04id7rqorson1ekn2itx0nkncq.png\" data-src=\"https:\/\/habrastorage.org\/webt\/x0\/4i\/d7\/x04id7rqorson1ekn2itx0nkncq.png\"\/><\/p>\n<p>  \u2026 \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430 <code><font color=\"#680ea1\">.searchable<\/font><\/code>:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/f-\/mj\/yg\/f-mjygaawz1beuoyl-fjvr_vrvo.png\" data-src=\"https:\/\/habrastorage.org\/webt\/f-\/mj\/yg\/f-mjygaawz1beuoyl-fjvr_vrvo.png\"\/><\/p>\n<p>  \u2026 \u0438 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u043c <code><font color=\"#680ea1\">.onChange(of: query)<\/font><\/code>:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/hr\/2m\/2r\/hr2m2r6akhjun6u_cke3clnj4k4.png\" data-src=\"https:\/\/habrastorage.org\/webt\/hr\/2m\/2r\/hr2m2r6akhjun6u_cke3clnj4k4.png\"\/><\/p>\n<p>  \u042d\u0442\u043e \u0434\u0430\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u0442\u044c \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442\u044b \u043f\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e \u043f\u0435\u0440\u0432\u044b\u0445 \u0431\u0443\u043a\u0432 \u0433\u043e\u0440\u043e\u0434\u0430 <code><font color=\"#680ea1\">city_<\/font><\/code>, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442.<\/p>\n<p>  \u0414\u043b\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f <code><font color=\"#680ea1\">@FetchRequest<\/font><\/code> \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 <code><font color=\"#680ea1\">managedObjectContext<\/font><\/code>, \u0438 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0435\u0433\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code><font color=\"#680ea1\">@Environment (\\.managedObjectContext)<\/font><\/code> \u0432 \u0432\u0438\u0434\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <code><font color=\"#c3178D\">var<\/font><\/code> <code><font color=\"#680ea1\">viewContext<\/font><\/code>:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/o3\/if\/bh\/o3ifbh9eu9oi43g7sl1se60afli.png\" data-src=\"https:\/\/habrastorage.org\/webt\/o3\/if\/bh\/o3ifbh9eu9oi43g7sl1se60afli.png\"\/><\/p>\n<p>  A \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 <code><font color=\"#680ea1\">query<\/font><\/code> \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 \u043f\u0440\u0435\u0434\u0438\u043a\u0430\u0442\u0430 <code><font color=\"#680ea1\">nsPredicate<\/font><\/code>, \u043b\u0435\u0436\u0430\u0449\u0435\u0433\u043e \u0432 \u043e\u0441\u043d\u043e\u0432\u0435 <code><font color=\"#680ea1\">@FetchRequest<\/font><\/code>:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/le\/47\/v3\/le47v3zgzxgdpkdcyuiwipwzgnm.png\" data-src=\"https:\/\/habrastorage.org\/webt\/le\/47\/v3\/le47v3zgzxgdpkdcyuiwipwzgnm.png\"\/><\/p>\n<p>  \u0421\u0430\u043c \u043f\u0440\u0435\u0434\u0438\u043a\u0430\u0442 \u043f\u043e\u0438\u0441\u043a\u0430 <code><font color=\"#680ea1\">searchPredicate<\/font><\/code> \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043a\u043b\u0430\u0441\u0441\u0435 <code><font color=\"#c3178D\">class<\/font><\/code> <code><font color=\"#680ea1\">Airport<\/font><\/code>:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/b4\/yw\/ql\/b4ywqljfxg6_4o6ms9dckebb_9i.png\" data-src=\"https:\/\/habrastorage.org\/webt\/b4\/yw\/ql\/b4ywqljfxg6_4o6ms9dckebb_9i.png\"\/><\/p>\n<p>  \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c \u0432 \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 \u043d\u0430\u0447\u0430\u043b\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u0433\u043e\u0440\u043e\u0434\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u201cSan\u201d \u0438\u043b\u0438 \u201c\u0421\u201d), \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u043e\u0442\u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0442\u0430\u043a\u0438\u0445 \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442\u043e\u0432 <code><font color=\"#680ea1\">Airport<\/font><\/code>:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/np\/vd\/_7\/npvd_7aggqsn5zkvqoyvah9wk_w.png\" data-src=\"https:\/\/habrastorage.org\/webt\/np\/vd\/_7\/npvd_7aggqsn5zkvqoyvah9wk_w.png\"\/><\/p>\n<p>  \u0412 \u043e\u0442\u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u0438\u043b\u0438 \u0432 \u041d\u0415-\u043e\u0442\u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u0441\u043f\u0438\u0441\u043a\u0435 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043b\u044e\u0431\u043e\u0439 \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442 <b><font color=\"#ff0000\">San Francisco Int\u2019l<\/font><\/b>, \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043d\u0435\u043c:  <\/p>\n<ul>\n<li>\u041f\u043e\u043b\u043d\u043e\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442\u0430,<\/li>\n<li>\u0420\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 \u043a\u0430\u0440\u0442\u0435,<\/li>\n<li>\u041f\u0440\u0438\u043b\u0435\u0442\u044b \u0438 \u0412\u044b\u043b\u0435\u0442\u044b (\u044d\u0442\u043e \u043d\u0430\u0448\u0438 <code><font color=\"#680ea1\">flightsTo<\/font><\/code> \u0438 <code><font color=\"#680ea1\">flightsFrom<\/font><\/code>)<\/li>\n<\/ul>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/ef\/gi\/9f\/efgi9fon_hnqogggw6mqhpmeraw.png\" data-src=\"https:\/\/habrastorage.org\/webt\/ef\/gi\/9f\/efgi9fon_hnqogggw6mqhpmeraw.png\"\/><\/p>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0435\u043d \u043a\u043e\u0434 \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e\u0431 \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442\u0435 <code><font color=\"#680ea1\">AirportDetailView<\/font><\/code>. <\/p>\n<p>  \u041c\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u0432 <code><font color=\"#680ea1\">AirportDetailView<\/font><\/code> \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0439 \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c \u0441\u043f\u0438\u0441\u043a\u0435 \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442 <code><font color=\"#c3178D\">var<\/font><\/code> <code><font color=\"#680ea1\">airport: Airport<\/font><\/code>, \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0447\u0435\u043c\u0443 \u043d\u0430\u043c \u0434\u0430\u0436\u0435 \u043d\u0435 \u043d\u0443\u0436\u0435\u043d \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 <code><font color=\"#680ea1\">managedObjectContext<\/font><\/code>. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u0430 <code><font color=\"#680ea1\">@State<\/font><\/code> \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f <code><font color=\"#c3178D\">var<\/font><\/code><code><font color=\"#680ea1\">to<\/font><\/code> \u0434\u043b\u044f \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u041f\u0440\u0438\u043b\u0435\u0442\u044b \u0438 \u0412\u044b\u043b\u0435\u0442\u044b. <\/p>\n<p>  \u0418\u043d\u0438\u0446\u0438\u0438\u0440\u0443\u0435\u043c \u0440\u0435\u0433\u0438\u043e\u043d <code><font color=\"#680ea1\">mapRegion<\/font><\/code> \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442\u0430 <code><font color=\"#680ea1\">airport<\/font><\/code> \u043d\u0430 \u043a\u0430\u0440\u0442\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code><font color=\"#680ea1\">Map<\/font><\/code>:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/x6\/5l\/xn\/x65lxnvigqj0fwadrtx1mqlm45w.png\" data-src=\"https:\/\/habrastorage.org\/webt\/x6\/5l\/xn\/x65lxnvigqj0fwadrtx1mqlm45w.png\"\/><\/p>\n<p>  \u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043c\u044b \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u0442\u0430\u043a, \u0447\u0442\u043e \u043e\u0431\u044a\u0435\u043a\u0442 <code><font color=\"#680ea1\">Airport<\/font><\/code> \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 <code><font color=\"#680ea1\">Core Data<\/font><\/code> \u0442\u0430\u043a\u0436\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b <code><font color=\"#680ea1\">MKAnnotation<\/font><\/code>, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043d\u0430\u043c \u0431\u0435\u0437 \u0442\u0440\u0443\u0434\u0430 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u0435\u0433\u043e \u043d\u0430 \u043a\u0430\u0440\u0442\u0435 <code><font color=\"#680ea1\">Map<\/font><\/code>:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/i7\/2i\/wg\/i72iwghwl1tmizszu0yuv425jrk.png\" data-src=\"https:\/\/habrastorage.org\/webt\/i7\/2i\/wg\/i72iwghwl1tmizszu0yuv425jrk.png\"\/><\/p>\n<p>  \u0412 <code><font color=\"#680ea1\">body<\/font><\/code> \u043c\u044b \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u0435\u043c <code><font color=\"#680ea1\">VStack<\/font><\/code> \u0441 \u043a\u0430\u0440\u0442\u043e\u0439 <code><font color=\"#680ea1\">Map<\/font><\/code>, c <code><font color=\"#680ea1\">Picker<\/font><\/code> \u0434\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u0430 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u041f\u0440\u0438\u043b\u0435\u0442\u044b \u0438 \u0412\u044b\u043b\u0435\u0442\u044b \u0438 \u0441\u043f\u0438\u0441\u043e\u043a \u041f\u0440\u0438\u043b\u0435\u0442\u043e\u0432 \u0438\u043b\u0438 \u0441\u043f\u0438\u0441\u043e\u043a \u0412\u044b\u043b\u0435\u0442\u043e\u0432 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a\u043e\u0439 \u0441\u0435\u0433\u043c\u0435\u043d\u0442 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/tl\/yc\/4f\/tlyc4fxhx6yfvabtorocchaostg.png\" data-src=\"https:\/\/habrastorage.org\/webt\/tl\/yc\/4f\/tlyc4fxhx6yfvabtorocchaostg.png\"\/><\/p>\n<p>  \u0414\u043b\u044f \u044d\u0442\u0438\u0445 \u0441\u043f\u0438\u0441\u043a\u043e\u0432 \u043d\u0430\u043c \u0434\u0430\u0436\u0435 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u0432\u044b\u0431\u043e\u0440\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 <code><font color=\"#680ea1\">Core Data<\/font><\/code>. \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0441\u0432\u044f\u0437\u044f\u043c <b>one-to-many<\/b> \u043c\u0435\u0436\u0434\u0443 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438 <code><font color=\"#680ea1\">Flight<\/font><\/code> \u0438 <code><font color=\"#680ea1\">Airport<\/font><\/code>, \u044d\u0442\u0438 \u0441\u043f\u0438\u0441\u043a\u0438 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432 \u0432\u0438\u0434\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432 <code><font color=\"#680ea1\">flightsFrom_<\/font><\/code> \u0438 <code><font color=\"#680ea1\">flightsTo_<\/font><\/code>:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/64\/9x\/yt\/649xytge-rvulsdey-_fcnlltdk.png\" data-src=\"https:\/\/habrastorage.org\/webt\/64\/9x\/yt\/649xytge-rvulsdey-_fcnlltdk.png\"\/><\/p>\n<p>  \u041d\u043e \u044d\u0442\u043e <b>Objective-C <\/b>\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 <code><font color=\"#680ea1\">NSSet<\/font><\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 <code><font color=\"#680ea1\">flightsFrom<\/font><\/code> \u0438 <code><font color=\"#680ea1\">flightsTo<\/font><\/code> \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u043b\u0438 \u0432 <b>Swift<\/b> \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 <code><font color=\"#680ea1\">Set&amp;ltFlight&amp;gt<\/font><\/code> \u0432 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0438 <code><font color=\"#c3178D\">extension<\/font><\/code> \u043a\u043b\u0430\u0441\u0441\u0430 <code><font color=\"#c3178D\">class<\/font><\/code> <code><font color=\"#680ea1\">Airport<\/font><\/code>:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/fy\/vg\/z7\/fyvgz7zaodzudgaoi69oddy0tza.png\" data-src=\"https:\/\/habrastorage.org\/webt\/fy\/vg\/z7\/fyvgz7zaodzudgaoi69oddy0tza.png\"\/><\/p>\n<p>  \u0412 \u0441\u043f\u0438\u0441\u043a\u0430\u0445 <code><font color=\"#680ea1\">List<\/font><\/code> \u041f\u0440\u0438\u043b\u0435\u0442\u043e\u0432 \u0438 \u0412\u044b\u043b\u0435\u0442\u043e\u0432 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043c\u0430\u0441\u0441\u0438\u0432 \u041f\u0440\u0438\u043b\u0435\u0442\u043e\u0432 <code><font color=\"#680ea1\">Array(airport.flightsTo)<\/font><\/code> \u0438 \u043c\u0430\u0441\u0441\u0438\u0432 \u0412\u044b\u043b\u0435\u0442\u043e\u0432 <code><font color=\"#680ea1\">Array(airport.flightsTo)<\/font><\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043f\u0440\u0438\u043b\u0435\u0442\u0430 \u0438 \u0432\u044b\u043b\u0435\u0442\u0430:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/kt\/nt\/h8\/ktnth8ki8ii3edg73uxgx97n49q.png\" data-src=\"https:\/\/habrastorage.org\/webt\/kt\/nt\/h8\/ktnth8ki8ii3edg73uxgx97n49q.png\"\/><\/p>\n<p>  \u0414\u043b\u044f \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 <code><font color=\"#680ea1\">AirportDetailView_Preview<\/font><\/code> \u043c\u044b \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 <code><font color=\"#680ea1\">Core Data<\/font><\/code> \u201c\u0432 \u043f\u0430\u043c\u044f\u0442\u0438\u201d (in memory) \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0442\u0443\u0434\u0430 \u0442\u0440\u043e\u0439\u043a\u0443 \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442\u043e\u0432:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/bg\/oq\/zy\/bgoqzyfuhfxykxnkbidvqsfnkzw.png\" data-src=\"https:\/\/habrastorage.org\/webt\/bg\/oq\/zy\/bgoqzyfuhfxykxnkbidvqsfnkzw.png\"\/><\/p>\n<p>  \u2026 \u0438 \u043f\u0430\u0440\u0443 \u0440\u0435\u0439\u0441\u043e\u0432:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/rb\/7b\/tv\/rb7btvnjkc17nvuu7wkeuuppan4.png\" data-src=\"https:\/\/habrastorage.org\/webt\/rb\/7b\/tv\/rb7btvnjkc17nvuu7wkeuuppan4.png\"\/><\/p>\n<p>  \u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0440\u0435\u0439\u0441\u0430 \u0432 \u0441\u043f\u0438\u0441\u043a\u0430\u0445 \u041f\u0440\u0438\u043b\u0435\u0442\u043e\u0432 \u0438 \u0412\u044b\u043b\u0435\u0442\u043e\u0432 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043a\u0440\u0430\u0442\u043a\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u0440\u0435\u0439\u0441\u0435 \u0432 <code><font color=\"#680ea1\">FlightViewShort<\/font><\/code>:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/g8\/wa\/yx\/g8wayx2dgu6-2_bkrjqnii2ht78.png\" data-src=\"https:\/\/habrastorage.org\/webt\/g8\/wa\/yx\/g8wayx2dgu6-2_bkrjqnii2ht78.png\"\/><\/p>\n<p>  \u041c\u044b \u0437\u0430\u0434\u0430\u0435\u043c \u0440\u0435\u0439\u0441 <code><font color=\"#680ea1\">flight<\/font><\/code> \u0438 \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442 <code><font color=\"#680ea1\">airport<\/font><\/code>, \u0438 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u043e\u0433\u043e, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438 \u044d\u0442\u043e\u0442 \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442 airport \u043f\u0443\u043d\u043a\u0442\u043e\u043c \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f <code><font color=\"#680ea1\">origin<\/font><\/code> \u0438\u043b\u0438 \u043f\u0443\u043d\u043a\u0442\u043e\u043c \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f <code><font color=\"#680ea1\">destination<\/font><\/code>, \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043d\u0443\u0436\u043d\u044b\u0439 <b>UI<\/b>.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u044b \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u043d\u0430 \u043a\u043e\u0434, \u0442\u043e \u043d\u0435 \u0443\u0432\u0438\u0434\u0438\u0442\u0435 \u043d\u0438\u0433\u0434\u0435 \u0441\u043b\u0435\u0434\u043e\u0432 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0432\u044b \u043e\u0431\u0449\u0430\u0435\u0442\u0435\u0441\u044c \u0441 <code><font color=\"#680ea1\">Core Data<\/font><\/code>, \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u044b: \u0440\u0435\u0439\u0441 <code><font color=\"#c3178D\">var<\/font><\/code> <code><font color=\"#680ea1\">flight : Flight<\/font><\/code> \u0438 \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442 <code><font color=\"#c3178D\">var<\/font><\/code> <code><font color=\"#680ea1\">airport: Airport<\/font><\/code>, \u0438 \u043c\u044b \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u0443\u0435\u043c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043d\u0438\u0445, \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u044f \u043d\u0430 \u043d\u0430\u0448\u0435\u043c <b>UI<\/b> \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u0438\u043b\u0435\u0442\u0430 \/ \u0432\u044b\u043b\u0435\u0442\u0430 \u043f\u043e \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0438\u044e \u0438 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u0438\u043b\u0435\u0442\u0430 \/ \u0432\u044b\u043b\u0435\u0442\u0430, \u043a\u0443\u0434\u0430 \u043f\u0440\u0438\u043b\u0435\u0442\u0430\u0435\u0442 \u0438\u043b\u0438 \u043e\u0442\u043a\u0443\u0434\u0430 \u0443\u043b\u0435\u0442\u0430\u0435\u0442 \u0441\u0430\u043c\u043e\u043b\u0435\u0442.<\/p>\n<p>  \u0422\u043e\u0447\u043d\u043e \u0442\u0430\u043a\u0436\u0435 \u043a\u0430\u043a \u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 <code><font color=\"#680ea1\">AirportDetailView<\/font><\/code>, \u043c\u044b \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c \u0434\u043b\u044f \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 <b>Preview<\/b> \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 <code><font color=\"#680ea1\">Core Data<\/font><\/code> \u201c\u0432 \u043f\u0430\u043c\u044f\u0442\u0438\u201d (in memory) \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0442\u0443\u0434\u0430 \u043f\u0430\u0440\u0443 \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442\u043e\u0432 \u0438 \u0440\u0435\u0439\u0441:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/hw\/3r\/91\/hw3r91jcgrijkxgn_ucn5umd2wo.png\" data-src=\"https:\/\/habrastorage.org\/webt\/hw\/3r\/91\/hw3r91jcgrijkxgn_ucn5umd2wo.png\"\/><\/p>\n<h2>\u0420\u0415\u0419\u0421\u042b <font color=\"#680ea1\">FlightsView<\/font><\/h2>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/ku\/qu\/fv\/kuqufvmpw2_satmahi9vq_gxesg.png\" data-src=\"https:\/\/habrastorage.org\/webt\/ku\/qu\/fv\/kuqufvmpw2_satmahi9vq_gxesg.png\"\/><\/p>\n<p>  \u041d\u0430\u0448 <code><font color=\"#680ea1\">View<\/font><\/code> \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430 \u0440\u0435\u0439\u0441\u043e\u0432<code><font color=\"#680ea1\"> flights<\/font><\/code>:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/9w\/6n\/uy\/9w6nuy8uclji4mwpxalsnkls19o.png\" data-src=\"https:\/\/habrastorage.org\/webt\/9w\/6n\/uy\/9w6nuy8uclji4mwpxalsnkls19o.png\"\/><\/p>\n<p>  \u2026 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code><font color=\"#680ea1\">@FetchRequest<\/font><\/code>:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/9h\/5l\/0t\/9h5l0tevf3_7xk6hzomuuq3r1ya.png\" data-src=\"https:\/\/habrastorage.org\/webt\/9h\/5l\/0t\/9h5l0tevf3_7xk6hzomuuq3r1ya.png\"\/><\/p>\n<p>  \u2026 \u0438 \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 <code><font color=\"#680ea1\">query<\/font><\/code>:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/rc\/ka\/yo\/rckayor_tl_bldklchmtsc4zzag.png\" data-src=\"https:\/\/habrastorage.org\/webt\/rc\/ka\/yo\/rckayor_tl_bldklchmtsc4zzag.png\"\/><\/p>\n<p>  \u041e\u043d\u0430 \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0430 \u0432 \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0435 <code><font color=\"#680ea1\">.searchable<\/font><\/code>:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/z0\/sh\/gi\/z0shgiotyshaafts-r8menaf-a0.png\" data-src=\"https:\/\/habrastorage.org\/webt\/z0\/sh\/gi\/z0shgiotyshaafts-r8menaf-a0.png\"\/><\/p>\n<p>  \u2026 \u0438 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u043c <code><font color=\"#680ea1\">.onChange(of: query)<\/font><\/code>:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/m4\/bm\/fn\/m4bmfnqhewvho4s1_j3ofgmz9bm.png\" data-src=\"https:\/\/habrastorage.org\/webt\/m4\/bm\/fn\/m4bmfnqhewvho4s1_j3ofgmz9bm.png\"\/><\/p>\n<p>  \u041d\u0430 \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u043f\u0430\u043d\u0435\u043b\u0438 \u0438\u043c\u0435\u044e\u0442\u0441\u044f \u0434\u0432\u0435 \u043a\u043d\u043e\u043f\u043a\u0438: <code><font color=\"#680ea1\">Load<\/font><\/code> \u0438 <code><font color=\"#680ea1\">Filter<\/font><\/code>:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/3z\/2p\/dj\/3z2pdjgxvwwy5jrkoe3d3j9sovi.png\" data-src=\"https:\/\/habrastorage.org\/webt\/3z\/2p\/dj\/3z2pdjgxvwwy5jrkoe3d3j9sovi.png\"\/><\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/6m\/ak\/to\/6makto9__ix--kqgqubzfq4gijg.png\" data-src=\"https:\/\/habrastorage.org\/webt\/6m\/ak\/to\/6makto9__ix--kqgqubzfq4gijg.png\"\/><\/p>\n<p>  \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c \u0432 \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 \u043d\u0430\u0447\u0430\u043b\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u0433\u043e\u0440\u043e\u0434\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <b><font color=\"#ff0000\">\u201cSan Fr\u201d<\/font><\/b> \u0438\u043b\u0438 <b><font color=\"#ff0000\">\u201c\u0421hi\u201d<\/font><\/b>), \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043e\u0442\u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0440\u0435\u0439\u0441\u043e\u0432 <code><font color=\"#680ea1\">flights<\/font><\/code> \u043f\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044e \u0433\u043e\u0440\u043e\u0434\u0430 \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442\u0430 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e <b><font color=\"#ff0000\">San Francisco<\/font><\/b> \u0438 <b><font color=\"#ff0000\">Chicago<\/font><\/b>:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/uu\/xp\/vw\/uuxpvwr30d_stzx5zio4fi5kswq.png\" data-src=\"https:\/\/habrastorage.org\/webt\/uu\/xp\/vw\/uuxpvwr30d_stzx5zio4fi5kswq.png\"\/><\/p>\n<p>  \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0437\u0430\u0434\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u0439 \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u0439 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 <code><font color=\"#c3178D\">struct<\/font><\/code> <code><font color=\"#680ea1\">FlightSearch<\/font><\/code>:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/uc\/wj\/ny\/ucwjny9b6hcww6jqwxveohw01em.png\" data-src=\"https:\/\/habrastorage.org\/webt\/uc\/wj\/ny\/ucwjny9b6hcww6jqwxveohw01em.png\"\/><\/p>\n<p>  \u041a\u0440\u0438\u0442\u0435\u0440\u0438\u0439 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0432 \u0441\u0435\u0431\u044f \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f <code><font color=\"#680ea1\">destination<\/font><\/code>, \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f <code><font color=\"#680ea1\">origin<\/font><\/code>, \u0430\u0432\u0438\u0430\u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044e airline \u0438 \u043d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435 \u0432 \u0432\u043e\u0437\u0434\u0443\u0445\u0435 <code><font color=\"#680ea1\">inAir<\/font><\/code> \u041f\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c \u044d\u0442\u0438\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043c\u044b \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u0439 \u0432\u044b\u0431\u043e\u0440\u043a\u0438 \u0432 \u0432\u0438\u0434\u0435 \u043f\u0440\u0435\u0434\u0438\u043a\u0430\u0442\u0430 <code><font color=\"#680ea1\">predicate<\/font><\/code>:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/vu\/zm\/33\/vuzm33fjxdwnaxmanv-kw7areoe.png\" data-src=\"https:\/\/habrastorage.org\/webt\/vu\/zm\/33\/vuzm33fjxdwnaxmanv-kw7areoe.png\"\/><\/p>\n<p>  \u0411\u0435\u0437\u0443\u0441\u043b\u043e\u0432\u043d\u043e, \u0435\u0441\u0442\u044c <b>UI<\/b> \u0434\u043b\u044f \u0437\u0430\u0434\u0430\u043d\u0438\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0432\u044b\u0431\u043e\u0440\u043a\u0438 <code><font color=\"#680ea1\">destination<\/font><\/code>, <code><font color=\"#680ea1\">origin<\/font><\/code>, <code><font color=\"#680ea1\">airline<\/font><\/code> \u0438<code><font color=\"#680ea1\">inAir<\/font><\/code>. \u042d\u0442\u043e <code><font color=\"#680ea1\">FilterFlights<\/font><\/code> (\u0441\u043b\u0435\u0432\u0430), a \u0441\u043f\u0440\u0430\u0432\u0430 \u0432\u044b \u0432\u0438\u0434\u0438\u0442\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u044b\u0431\u043e\u0440\u043a\u0438 \u0440\u0435\u0439\u0441\u043e\u0432 \u043f\u043e \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u043c\u0443 \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u044e:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/cy\/e4\/cx\/cye4cxf9eacxq415h0ucd5ziocw.png\" data-src=\"https:\/\/habrastorage.org\/webt\/cy\/e4\/cx\/cye4cxf9eacxq415h0ucd5ziocw.png\"\/><\/p>\n<p>  \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442\u0430 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f <b>Destination<\/b> \u043c\u044b \u0432\u044b\u0431\u0440\u0430\u043b\u0438 \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442 <b><font color=\"#ff0000\">Chicago O&#8217;Hare<\/font><\/b>, a \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u0432\u0438\u0430\u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 <b>Airline<\/b> \u2014 <b><font color=\"#ff0000\">United<\/font><\/b>, \u043a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043d\u0430\u0441 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0442 \u0440\u0435\u0439\u0441\u044b, \u043d\u0430\u0445\u043e\u0434\u044f\u0449\u0438\u0435\u0441\u044f \u0432 \u0432\u043e\u0437\u0434\u0443\u0445\u0435, \u0442\u043e \u0435\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u044c <b>Enroute Only<\/b> \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u0432 <code><font color=\"#c3178D\">True<\/font><\/code>.<\/p>\n<p>  \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0433\u043e \u0444\u0438\u043b\u044c\u0442\u0440\u0430 (\u043a\u043d\u043e\u043f\u043a\u0430 <code><font color=\"#680ea1\">Done<\/font><\/code>), \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 6 \u0440\u0435\u0439\u0441\u043e\u0432 \u0441 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0430\u043c\u0438, \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u044e\u0449\u0438\u043c\u0438 \u044d\u0442\u043e\u043c\u0443 \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u044e.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u043c\u044b \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u043c<b> Enroute Only<\/b> \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 <code><font color=\"#c3178D\">False<\/font><\/code>, \u0442\u043e \u0435\u0441\u0442\u044c \u043d\u0430\u0441 \u0431\u0443\u0434\u0443\u0442 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u0432\u0430\u0442\u044c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0435\u0439\u0441\u044b, \u043d\u0430\u0445\u043e\u0434\u044f\u0449\u0438\u0435\u0441\u044f \u0432 \u0432\u043e\u0437\u0434\u0443\u0445\u0435, \u043d\u043e \u0438 \u0442\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u0436\u0435 \u043f\u0440\u0438\u043b\u0435\u0442\u0435\u043b\u0438 \u0438\u043b\u0438 \u0441\u043e\u0431\u0438\u0440\u0430\u044e\u0442\u0441\u044f \u0443\u043b\u0435\u0442\u0430\u0442\u044c, \u0442\u043e \u043c\u044b \u0443\u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u0447\u0438\u0441\u043b\u043e \u0440\u0435\u0439\u0441\u043e\u0432 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u0441\u044f \u0434\u043e 8 \u0440\u0435\u0439\u0441\u043e\u0432, \u0442\u0443\u0434\u0430 \u0432\u043e\u0439\u0434\u0443\u0442 \u0434\u0432\u0430 \u0440\u0435\u0439\u0441\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u0436\u0435 \u043f\u0440\u0438\u043b\u0435\u0442\u0435\u043b\u0438 \u0432 \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442 <b><font color=\"#ff0000\">Chicago O&#8217;Hare<\/font><\/b> \u0438 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u043d\u0430 \u0437\u0435\u043c\u043b\u0435.<\/p>\n<p>  \u0418 \u043e\u043f\u044f\u0442\u044c \u0441\u043b\u0435\u0432\u0430 \u0432\u044b \u0432\u0438\u0434\u0438\u0442\u0435 <b>UI<\/b> \u0434\u043b\u044f \u0437\u0430\u0434\u0430\u043d\u0438\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0432\u044b\u0431\u043e\u0440\u043a\u0438 <code><font color=\"#680ea1\">destination<\/font><\/code>, <code><font color=\"#680ea1\">origin<\/font><\/code>, <code><font color=\"#680ea1\">airline<\/font><\/code> \u0438<code><font color=\"#680ea1\">inAir<\/font><\/code>, a \u0441\u043f\u0440\u0430\u0432\u0430 \u2014 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u044b\u0431\u043e\u0440\u043a\u0438 \u0440\u0435\u0439\u0441\u043e\u0432 \u043f\u043e \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u043c\u0443 \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u044e:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/wh\/jz\/xn\/whjzxnyxldexrxmjiapthdohqxi.png\" data-src=\"https:\/\/habrastorage.org\/webt\/wh\/jz\/xn\/whjzxnyxldexrxmjiapthdohqxi.png\"\/><\/p>\n<p>  \u0414\u043b\u044f \u0437\u0430\u0434\u0430\u043d\u0438\u044f \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442\u0430 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f <b>Destination<\/b> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c <code><font color=\"#680ea1\">Picker<\/font><\/code>:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/zv\/t1\/zv\/zvt1zvvsricgugthfkoaj4s8eeq.png\" data-src=\"https:\/\/habrastorage.org\/webt\/zv\/t1\/zv\/zvt1zvvsricgugthfkoaj4s8eeq.png\"\/><\/p>\n<p>  \u041d\u0443\u0436\u043d\u044b\u0439 \u043d\u0430\u043c \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442 \u043c\u044b \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code><font color=\"#680ea1\">Picker<\/font><\/code> \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430 \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0432 \u0441\u0435\u0431\u044f <code><font color=\"#680ea1\">Any<\/font><\/code> (\u0442\u043e \u0435\u0441\u0442\u044c \u043b\u044e\u0431\u043e\u0439 \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442). \u0412 \u043d\u0430\u0448\u0435\u043c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442 <b><font color=\"#ff0000\">San Francisco<\/font><\/b>:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/22\/w4\/nf\/22w4nfk09dvisrsiesz_lsysipu.png\" data-src=\"https:\/\/habrastorage.org\/webt\/22\/w4\/nf\/22w4nfk09dvisrsiesz_lsysipu.png\"\/><\/p>\n<p>  \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u0441\u0435\u0445 \u0440\u0435\u0439\u0441\u043e\u0432, \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0445\u0441\u044f a \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442 <b><font color=\"#ff0000\">San Francisco<\/font><\/b>, \u043b\u0438\u0431\u043e \u043d\u0435\u0434\u0430\u0432\u043d\u043e \u0442\u0430\u043c \u043f\u0440\u0438\u0437\u0435\u043c\u043b\u0438\u0432\u0448\u0438\u0445\u0441\u044f \u0442\u0430\u043c:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/yj\/1f\/x-\/yj1fx-ompxcu22dnpl9gbuuqclm.png\" data-src=\"https:\/\/habrastorage.org\/webt\/yj\/1f\/x-\/yj1fx-ompxcu22dnpl9gbuuqclm.png\"\/><\/p>\n<p>  \u0414\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u0430 \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442\u0430 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f <b>Destination<\/b> \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u0440\u0442\u043e\u0439: \u043b\u0438\u0431\u043e \u201c\u0440\u043e\u0434\u043d\u043e\u0439\u201d <code><font color=\"#680ea1\">SwiftUI Map<\/font><\/code>, \u043b\u0438\u0431\u043e \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 <code><font color=\"#680ea1\">MapKit<\/font><\/code> \u0432 <code><font color=\"#680ea1\">SwiftUI<\/font><\/code>:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/rh\/0h\/rr\/rh0hrrfas8aem-vhhdzexh5t8os.png\" data-src=\"https:\/\/habrastorage.org\/webt\/rh\/0h\/rr\/rh0hrrfas8aem-vhhdzexh5t8os.png\"\/><\/p>\n<p>  \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u043d\u0430\u0447\u0430\u0442\u044c \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u043f\u0443\u043d\u043a\u0442 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f <b>Destination<\/b> \u043f\u0440\u044f\u043c\u043e \u043d\u0430 \u043a\u0430\u0440\u0442\u0435, a \u043a\u043e\u0433\u0434\u0430 \u0443\u0432\u0438\u0434\u0438\u043c \u043d\u0443\u0436\u043d\u044b\u0439 \u043d\u0430\u043c \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442, \u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0449\u0435\u043b\u043a\u043d\u0435\u043c \u043d\u0430 \u0435\u0433\u043e \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0435:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/-3\/5c\/9r\/-35c9ru2ryldyyzgexuwbypqb0o.gif\" data-src=\"https:\/\/habrastorage.org\/webt\/-3\/5c\/9r\/-35c9ru2ryldyyzgexuwbypqb0o.gif\"\/><\/p>\n<p>  \u041c\u044b \u0432\u044b\u0431\u0440\u0430\u043b\u0438 \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442 <b><font color=\"#ff0000\">Los Angeles Int<\/font><\/b> \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0432\u0441\u0435 \u0440\u0435\u0439\u0441\u044b, \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0435\u0441\u044f \u0432 \u044d\u0442\u043e\u0442 \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/fd\/tg\/zo\/fdtgzom1n9o_021y72mqjlxr2y8.png\" data-src=\"https:\/\/habrastorage.org\/webt\/fd\/tg\/zo\/fdtgzom1n9o_021y72mqjlxr2y8.png\"\/><\/p>\n<h3>\u0415\u0434\u0438\u043d\u0438\u0446\u044b \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u0435\u0442\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438.<\/h3>\n<p>  \u041a\u0430\u0436\u0434\u044b\u0439 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u0439\u0441 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u0440\u0435\u0439\u0441\u043e\u0432 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/n7\/ub\/ik\/n7ubikxxlpcd8kshfomv9j3bgz8.png\" data-src=\"https:\/\/habrastorage.org\/webt\/n7\/ub\/ik\/n7ubikxxlpcd8kshfomv9j3bgz8.png\"\/>  <\/p>\n<ul>\n<li>\u043a\u043e\u0434\u043e\u043c \u0440\u0435\u0439\u0441\u0430 <b>UAL1780<\/b>, <\/li>\n<li>\u0433\u043e\u0440\u043e\u0434\u043e\u043c \u0432\u044b\u043b\u0435\u0442\u0430 <b>Portland<\/b>, <\/li>\n<li>\u0433\u043e\u0440\u043e\u0434\u043e\u043c \u043f\u0440\u0438\u043b\u0435\u0442\u0430 <b>San Francisco<\/b>, <\/li>\n<li>\u043f\u043e\u043b\u043d\u044b\u043c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c \u0430\u0432\u0438\u0430\u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 <b>United Air Lines Inc.<\/b>, <\/li>\n<li>\u0442\u0438\u043f\u043e\u043c \u0441\u0430\u043c\u043e\u043b\u0435\u0442\u0430 <b>A319<\/b>,<\/li>\n<li>\u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u043c \u043e\u0442 \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u043e \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442\u0430 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f <b>distance = 887 km<\/b>,<\/li>\n<li>\u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e \u043f\u043e\u043b\u0435\u0442\u0430 \u043f\u043e \u043f\u0440\u0438\u0431\u043e\u0440\u0430\u043c (\u041f\u041f\u041f) <b>speed = 800 km\/h<\/b>,<\/li>\n<li>\u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u0432\u0437\u043b\u0435\u0442\u0430 <b>Jan 26, 2022, 7:22 PM<\/b>,<\/li>\n<li>\u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u043f\u0440\u0438\u0437\u0435\u043c\u043b\u0435\u043d\u0438\u044f <b>Jan 26, 2022, 8:41 PM<\/b>,<\/li>\n<li>\u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e \u0440\u0435\u0439\u0441\u0430 <b>1 hours 18 min<\/b>,<\/li>\n<li>\u0441\u0440\u0435\u0434\u043d\u0435\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e \u043f\u043e\u043b\u0435\u0442\u0430 <b>aveSpeed = 682 km\/<\/b>h,<\/li>\n<li>\u0441\u0442\u0430\u0442\u0443\u0441\u043e\u043c \u0440\u0435\u0439\u0441\u0430 <b>\u041f\u0440\u0438\u0437\u0435\u043c\u043b. \/ \u0412\u044b\u0440\u0443\u043b\u0438\u0432<\/b>.,<\/li>\n<li>\u043f\u0440\u043e\u0446\u0435\u043d\u0442\u043e\u043c \u043f\u0440\u043e\u0439\u0434\u0435\u043d\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f <b>100 %<\/b><\/li>\n<\/ul>\n<p>  \u041d\u0443\u0436\u043d\u043e \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043e\u0442 <b><a href=\"https:\/\/ru.flightaware.com\/\" rel=\"nofollow noopener noreferrer\">FlightAware<\/a><\/b> \u043e \u0440\u0435\u0439\u0441\u0430\u0445 \u0441\u0430\u043c\u043e\u043b\u0435\u0442\u043e\u0432, \u0438\u043c\u0435\u044e\u0442 \u0435\u0434\u0438\u043d\u0438\u0446\u044b \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0435 \u043e\u0442 \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u044b\u0445 \u043d\u0430\u043c <b>\u0421\u0418<\/b> \u0435\u0434\u0438\u043d\u0438\u0446 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u043b\u0435\u0442\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0430 \u0432 \u043c\u0438\u043b\u044f\u0445 (<b>miles<\/b>), \u0432\u044b\u0441\u043e\u0442\u0430 \u0432 \u0444\u0443\u0442\u0430\u0445 (<b>foot<\/b>s), \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0432 \u0443\u0437\u043b\u0430\u0445 (<b>knots<\/b>). \u041c\u044b, \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0445\u043e\u0442\u0438\u043c \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u043d\u0430 \u043d\u0430\u0448\u0435\u043c <b>UI<\/b> \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u0435\u0442\u043d\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0432 \u0421\u0418 \u0435\u0434\u0438\u043d\u0438\u0446\u0430\u0445 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f: \u0434\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438 \u0432\u044b\u0441\u043e\u0442\u0443 \u2014 \u0432 \u043a\u0438\u043b\u043e\u043c\u0435\u0442\u0440\u0430\u0445 <b>km<\/b>, \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u2014 \u0432 <b>km\/h<\/b>. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u0434, \u0442\u0430\u043a \u043a\u0430\u043a \u0432 <code><font color=\"#680ea1\">Swift<\/font><\/code> \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0435\u0434\u0438\u043d\u0438\u0446 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f \u0434\u043b\u0438\u043d\u044b, \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e <code><font color=\"#680ea1\">UnitLength<\/font><\/code>, <code><font color=\"#680ea1\">UnitSpeed<\/font><\/code> \u0438 <code><font color=\"#680ea1\">UnitDuration<\/font><\/code>, \u0438 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043b\u0435\u0433\u043a\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 \u043e\u0434\u043d\u0438\u0445 \u0435\u0434\u0438\u043d\u0438\u0446\u0430\u0445 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f \u0432 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u0435\u0434\u0438\u043d\u0438\u0446\u0430\u0445 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f, \u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u044f \u044d\u0442\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c\u0438 \u0435\u0434\u0438\u043d\u0438\u0446\u0430\u043c\u0438 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f \u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u0442\u0430\u043a\u0436\u0435 \u043b\u043e\u043a\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0441\u0442\u0440\u0430\u043d\u044b. <\/p>\n<p>  \u0417\u0430 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u0438 \u0438\u0445 \u0435\u0434\u0438\u043d\u0438\u0446\u0430\u043c\u0438 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f \u0432 <b>iOS<\/b> \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0442 \u043e\u0431\u044a\u0435\u043a\u0442\u044b <code><font color=\"#680ea1\">Measurement<\/font><\/code> \u2014 \u044d\u0442\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u0442\u0435\u043c\u0430, \u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c <b><a href=\"https:\/\/oleb.net\/blog\/2016\/07\/measurements-and-units\/\" rel=\"nofollow noopener noreferrer\">\u0437\u0434\u0435\u0441\u044c<\/a><\/b>. \u0414\u043b\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u0441\u043b\u0443\u0447\u0430\u044f \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f <code><font color=\"#c3178D\">extension<\/font><\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u043b\u0438 \u0432 \u0444\u0430\u0439\u043b\u0435 <i>FoundationExtensions.swift<\/i>:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/-i\/_s\/pq\/-i_spq9wtsx5ixdy4pvh9ptl0cg.png\" data-src=\"https:\/\/habrastorage.org\/webt\/-i\/_s\/pq\/-i_spq9wtsx5ixdy4pvh9ptl0cg.png\"\/><br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/bx\/8b\/qb\/bx8bqblgibrvdfwzrs1pcg8fxms.png\" data-src=\"https:\/\/habrastorage.org\/webt\/bx\/8b\/qb\/bx8bqblgibrvdfwzrs1pcg8fxms.png\"\/><\/p>\n<p>  \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043d\u0430\u0448\u0435\u0439 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u043e\u0439 <b>ViewModel<\/b> <code><font color=\"#680ea1\">Flight<\/font><\/code> \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e, \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u044e\u0449\u0443\u044e \u0438\u0437 <b>Model<\/b>, \u043a \u0432\u0438\u0434\u0443, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u043c\u0443 \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0432<code><font color=\"#680ea1\">View<\/font><\/code> \u2026<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/if\/jo\/1p\/ifjo1pg38piwzn51fi6smxl8yis.png\" data-src=\"https:\/\/habrastorage.org\/webt\/if\/jo\/1p\/ifjo1pg38piwzn51fi6smxl8yis.png\"\/><\/p>\n<p>  \u2026 \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u043d\u0430\u0448\u0435\u043c <b>UI <\/b>\u0441\u0442\u0440\u043e\u043a\u0438 \u0441 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u043c \u043e\u0442 \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u043e \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442\u0430 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f <b>distance = 887 km<\/b> \u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e \u043f\u043e\u043b\u0435\u0442\u0430 \u043f\u043e \u043f\u0440\u0438\u0431\u043e\u0440\u0430\u043c (\u041f\u041f\u041f) <b>speed = 800 km\/h<\/b>, a \u0442\u0430\u043a\u0436\u0435 \u0441 \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e \u0440\u0435\u0439\u0441\u0430 <b>1 hours 18 m<\/b>in \u0438 \u0441\u0440\u0435\u0434\u043d\u0435\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e \u043f\u043e\u043b\u0435\u0442\u0430 <b>aveSpeed = 682 km\/<\/b>h \u0432 \u043d\u0443\u0436\u043d\u044b\u0445 \u043d\u0430\u043c \u0435\u0434\u0438\u043d\u0438\u0446\u0430\u0445 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f. \u041f\u0440\u0438\u0447\u0435\u043c \u0435\u0434\u0438\u043d\u0438\u0446\u044b \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043a \u043d\u0430\u0448\u0438\u043c \u0441\u0442\u0440\u043e\u043a\u0430\u043c \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438. \u041d\u043e \u044d\u0442\u043e\u0433\u043e \u043c\u0430\u043b\u043e. \u0412 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u044f\u0437\u044b\u043a\u0430, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d \u0432\u0430\u0448<b> iPhone<\/b>:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/tz\/mq\/hl\/tzmqhlwt46ivpnuoqnite6affa8.png\" data-src=\"https:\/\/habrastorage.org\/webt\/tz\/mq\/hl\/tzmqhlwt46ivpnuoqnite6affa8.png\"\/><\/p>\n<p>  \u2026 \u0435\u0434\u0438\u043d\u0438\u0446\u044b \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u043c \u044f\u0437\u044b\u043a\u0435. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u044f\u0437\u044b\u043a \u0432\u0430\u0448\u0435\u0433\u043e <b>iPhone<\/b> \u2014 \u0440\u0443\u0441\u0441\u043a\u0438\u0439, \u0442\u043e \u0438 \u0435\u0434\u0438\u043d\u0438\u0446\u044b \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f \u0442\u0430\u043a\u0436\u0435 \u0431\u0443\u0434\u0443\u0442 \u043d\u0430 \u0440\u0443\u0441\u0441\u043a\u043e\u043c \u044f\u0437\u044b\u043a\u0435:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/tu\/46\/0m\/tu460mvzilkoqwxcbwozmfeq57c.png\" data-src=\"https:\/\/habrastorage.org\/webt\/tu\/46\/0m\/tu460mvzilkoqwxcbwozmfeq57c.png\"\/><\/p>\n<p>  \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0435\u0441\u043b\u0438 \u044f\u0437\u044b\u043a \u0432\u0430\u0448\u0435\u0433\u043e <b>iPhone<\/b> \u2014 \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u0438\u0439\u2026<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/yw\/78\/ea\/yw78eav0qdw3el0qkqhzr5kvwbo.png\" data-src=\"https:\/\/habrastorage.org\/webt\/yw\/78\/ea\/yw78eav0qdw3el0qkqhzr5kvwbo.png\"\/><\/p>\n<p>  \u2026 \u0442\u043e \u0438 \u0435\u0434\u0438\u043d\u0438\u0446\u044b \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f \u0442\u0430\u043a\u0436\u0435 \u0431\u0443\u0434\u0443\u0442 \u043d\u0430 \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u043e\u043c \u044f\u0437\u044b\u043a\u0435:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/df\/w7\/mx\/dfw7mxatbav47qijyfayjwwgirc.png\" data-src=\"https:\/\/habrastorage.org\/webt\/df\/w7\/mx\/dfw7mxatbav47qijyfayjwwgirc.png\"\/><\/p>\n<h3>\u0417\u0410\u041a\u041b\u042e\u0427\u0415\u041d\u0418\u0415<\/h3>\n<p>  \u041f\u043e\u043a\u0430\u0437\u0430\u043d\u0430 \u043a\u043e\u043c\u0444\u043e\u0440\u0442\u043d\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430 <code><font color=\"#680ea1\">Core Data<\/font><\/code> \u0438 <code><font color=\"#680ea1\">SwiftUI<\/font><\/code> \u0441 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0432\u0437\u0430\u0438\u043c\u043e\u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u043c\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438 \u2014 \u043f\u043e\u043b\u0435\u0442\u0430\u043c\u0438 <code><font color=\"#680ea1\">Flight<\/font><\/code>, \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442\u0430\u043c\u0438 <code><font color=\"#680ea1\">Airport<\/font><\/code> \u0438 \u0430\u0432\u0438\u0430\u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f\u043c\u0438 <code><font color=\"#680ea1\">AirLine<\/font><\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043d\u0430 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e\u043c \u0441\u0435\u0440\u0432\u0438\u0441\u0435 <b><a href=\"https:\/\/ru.flightaware.com\/\" rel=\"nofollow noopener noreferrer\">FlightAware<\/a><\/b> \u0438 \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u0435\u043c \u0432 <code><font color=\"#680ea1\">Core Data<\/font><\/code>. \u042d\u0442\u043e \u0441\u0438\u043b\u044c\u043d\u043e \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u043d\u0430\u044f \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f <a href=\"https:\/\/cs193p.sites.stanford.edu\/2020\" rel=\"nofollow noopener noreferrer\">Enroute \u0438\u0437 \u0441\u0442\u044d\u043d\u0444\u043e\u0440\u0434\u0441\u043a\u0438\u0445 \u043a\u0443\u0440\u0441\u043e\u0432 CS193P 2020<\/a>, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0430 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e \u043f\u043e\u0434\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 <b><a href=\"https:\/\/ru.flightaware.com\/\" rel=\"nofollow noopener noreferrer\">FlightAware<\/a><\/b>.<\/p>\n<p>  \u0412 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u0432\u0437\u0430\u0438\u043c\u043e\u0441\u0432\u044f\u0437\u044f\u043c\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0442\u0438\u043f\u0430 <b>one-to-many<\/b>, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443 \u0444\u0430\u043d\u0442\u0430\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u00ab\u043e\u0431\u0435\u0440\u0442\u043a\u0438\u00bb <code><font color=\"#680ea1\">@FetchRequest<\/font><\/code> \u0432 <code><font color=\"#680ea1\">SwiftUI<\/font><\/code>. \u041a\u043e\u0434 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0443\u0434\u0430\u0435\u0442\u0441\u044f \u0441\u0438\u043b\u044c\u043d\u043e \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u043f\u0443\u0442\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f <code><font color=\"#c3178D\">extension<\/font><\/code> \u043a\u043b\u0430\u0441\u0441\u043e\u0432 <code><font color=\"#c3178D\">class<\/font><\/code> \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 <code><font color=\"#680ea1\">Core Data<\/font><\/code>, \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 <b>Xcode<\/b>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0430\u043c\u0438 \u043f\u043e \u0441\u0435\u0431\u0435 \u0443\u0436\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0440\u0435\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u043c\u0438 <b>ViewModel<\/b> \u0434\u043b\u044f \u044d\u0442\u0438\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u0438 \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u0434\u043e\u0431\u043d\u043e \u0441\u043f\u0440\u044f\u0442\u0430\u0442\u044c \u0432\u0441\u0435 \u00ab\u0448\u0435\u0440\u043e\u0445\u043e\u0432\u0430\u0442\u043e\u0441\u0442\u0438\u00bb \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f<b> Objective-C<\/b>\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e <b>API <\/b><code><font color=\"#680ea1\">Core Data<\/font><\/code> \u0441 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c <code><font color=\"#680ea1\">SwiftUI<\/font><\/code>. <\/p>\n<p>  \u041c\u043e\u0438 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u044b \u0441 \u043f\u043e\u043b\u0451\u0442\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439 \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0438, \u0447\u0442\u043e <code><font color=\"#680ea1\">Core Data<\/font><\/code> \u043e\u0447\u0435\u043d\u044c \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441 \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438, \u0442\u0430\u043a \u0447\u0442\u043e \u0432 \u043b\u044e\u0431\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u00ab\u043e\u0432\u0447\u0438\u043d\u043a\u0430 \u0441\u0442\u043e\u0438\u0442 \u0432\u044b\u0434\u0435\u043b\u043a\u0438\u00bb.<\/p>\n<p>  \u041a\u043e\u0434 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430<b><a href=\"https:\/\/github.com\/BestKora\/CoreDataSwiftUIFlights\" rel=\"nofollow noopener noreferrer\"> Github<\/a><\/b>.<\/div>\n<\/div>\n<\/div>\n<p> <!----> <!----><\/div>\n<p> <!----> <!----><br \/> \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\/667874\/\"> https:\/\/habr.com\/ru\/post\/667874\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-1\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\u0412 <a href=\"https:\/\/habr.com\/ru\/post\/663974\/\">\u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438<\/a> \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438 \u043e\u0441\u043d\u043e\u0432\u044b \u0440\u0430\u0431\u043e\u0442\u044b \u0441 <code><font color=\"#680ea1\">Core Data<\/font><\/code> \u0432 <code><font color=\"#680ea1\">SwiftUI<\/font><\/code> \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0435 <i>Apple<\/i>. \u042d\u0442\u043e \u0431\u044b\u043b\u043e \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c \u043e\u0434\u0438\u043d \u043e\u0431\u044a\u0435\u043a\u0442 <code><font color=\"#680ea1\">Core Data<\/font><\/code> \u0441 \u043e\u0434\u043d\u0438\u043c \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u043c, \u0438 \u0442\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u0431\u044b\u043b\u043e \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e, \u0447\u0442\u043e \u0434\u0430\u0432\u0430\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c <code><font color=\"#680ea1\">Core Data<\/font><\/code> \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \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 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0438 <code><font color=\"#c3178D\">extension<\/font><\/code> \u0438\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 <code><font color=\"#c3178D\">class<\/font><\/code>, \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u044b\u0445 <code>Xcode<\/code>, \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u043a\u043e\u043c\u0444\u043e\u0440\u0442\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 <code><font color=\"#680ea1\">Core Data<\/font><\/code> \u0432 <code><font color=\"#680ea1\">SwiftUI<\/font><\/code>. \u042d\u0442\u0438 \u043a\u043b\u0430\u0441\u0441\u044b \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043c\u0438\u043d\u0438\u0430\u0442\u044e\u0440\u043d\u044b\u043c\u0438 <code>ViewModels<\/code> \u0434\u043b\u044f \u043d\u0430\u0448\u0438\u0445 <code><font color=\"#680ea1\">SwiftUI Views<\/font><\/code>, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u043d\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0442 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u044b <code><font color=\"#680ea1\">ObservableObject<\/font><\/code> \u0438 <code><font color=\"#680ea1\">Identifiable<\/font><\/code>. \u0418 <code>Apple<\/code> \u043d\u0430\u0443\u0447\u0438\u043b\u0430 \u0438\u0445 \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e \u00ab\u0438\u0433\u0440\u0430\u0442\u044c\u00bb \u043d\u0430 \u043f\u043e\u043b\u0435 \u0440\u0435\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438 SwiftUI. <\/p>\n<p>  \u0412\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0441\u0442\u0430\u0442\u044c\u0438 \u044f \u0445\u043e\u0447\u0443 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u0440\u043e\u043b\u044c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u044b\u0445 <code>Xcode<\/code> \u043a\u043b\u0430\u0441\u0441\u043e\u0432 <code><font color=\"#c3178D\">class<\/font><\/code> \u0434\u043b\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 <code><font color=\"#680ea1\">Core Data<\/font><\/code> \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0432\u043e\u0437\u0440\u0430\u0441\u0442\u0430\u0435\u0442 \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0432\u0437\u0430\u0438\u043c\u043e\u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u043c\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438 \u2014 \u0440\u0435\u0439\u0441\u0430\u043c\u0438 <code><font color=\"#680ea1\">Flights<\/font><\/code>, \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442\u0430\u043c\u0438 <code><font color=\"#680ea1\">Airports<\/font><\/code> \u0438 \u0430\u0432\u0438\u0430\u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f\u043c\u0438 <code><font color=\"#680ea1\">AirLines<\/font><\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0432 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0435 \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 <a href=\"https:\/\/ru.flightaware.com\/\" rel=\"nofollow noopener noreferrer\"> FlightAware <\/a> \u0438 \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u0435\u043c \u0432 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 <code><font color=\"#680ea1\">Core Data<\/font><\/code>. <\/p>\n<p>  \u0421\u043e\u0437\u0434\u0430\u0432\u0430\u0435\u043c\u043e\u0435 \u0432 \u044d\u0442\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441 \u0438\u043c\u0435\u043d\u0435\u043c <code>CoreDataSwiftUIFlights<\/code> \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0438\u043b\u044c\u043d\u043e \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u043d\u043e\u0439 \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0435\u0439 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f <a href=\"https:\/\/cs193p.sites.stanford.edu\/2020\" rel=\"nofollow noopener noreferrer\">Enroute \u0438\u0437 \u0441\u0442\u044d\u043d\u0444\u043e\u0440\u0434\u0441\u043a\u0438\u0445 \u043a\u0443\u0440\u0441\u043e\u0432 CS193P 2020<\/a>, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e \u043f\u043e\u0434\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 <a href=\"https:\/\/ru.flightaware.com\/\" rel=\"nofollow noopener noreferrer\"> FlightAware <\/a> \u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043e\u0442 \u0432\u0430\u0441 \u043f\u043b\u0430\u0442\u043d\u043e\u0439 \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0438 \u043d\u0430 \u0441\u0435\u0440\u0432\u0438\u0441 <a href=\"https:\/\/ru.flightaware.com\/\" rel=\"nofollow noopener noreferrer\"> FlightAware <\/a>. <\/p>\n<p>  \u041e\u0434\u043d\u0430\u043a\u043e, \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0432\u0448\u0438\u0441\u044c \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 <a href=\"https:\/\/ru.flightaware.com\/\" rel=\"nofollow noopener noreferrer\">FlightAware<\/a>, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0441\u0440\u0435\u0437 \u043b\u044e\u0431\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0435\u0439 \u0432\u0430\u0441 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u0440\u0435\u0439\u0441\u0430\u0445 <code><font color=\"#680ea1\">Flights<\/font><\/code>, \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442\u0430\u0445 <code><font color=\"#680ea1\">Airports<\/font><\/code> \u0438 \u0430\u0432\u0438\u0430\u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f\u0445 <code><font color=\"#680ea1\">Airlines<\/font><\/code> \u0432 <code>JSON<\/code> \u0444\u043e\u0440\u043c\u0430\u0442\u0435. \u042d\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u044e\u0442\u0441\u044f \u0432 <code><font color=\"#680ea1\">Core Data<\/font><\/code> \u0441 \u0443\u0447\u0435\u0442\u043e\u043c \u0432\u0437\u0430\u0438\u043c\u043e\u0441\u0432\u044f\u0437\u0435\u0439 \u044d\u0442\u0438\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u0438 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u0438\u0434\u0435\u0442\u044c \u0432\u0441\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0440\u0435\u0439\u0441\u0430\u0445, \u043d\u043e \u0438 \u0434\u0435\u043b\u0430\u0442\u044c \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043a \u043d\u0435\u0439 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432 \u0438 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0435 \u043d\u0443\u0436\u043d\u044b\u043c \u0432\u0430\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/uv\/9x\/sk\/uv9xsks6w1taoephiojrt2lvyzw.png\" data-src=\"https:\/\/habrastorage.org\/webt\/uv\/9x\/sk\/uv9xsks6w1taoephiojrt2lvyzw.png\"\/> <\/p>\n<p>  \u041a\u043e\u0434 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430<b><a href=\"https:\/\/github.com\/BestKora\/CoreDataSwiftUIFlights\" rel=\"nofollow noopener noreferrer\"> Github<\/a><\/b>.  <\/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-341750","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/341750","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=341750"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/341750\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=341750"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=341750"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=341750"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}