{"id":16637,"date":"2025-02-16T15:31:36","date_gmt":"2025-02-16T15:31:36","guid":{"rendered":"https:\/\/bestkora.com\/IosDeveloper\/?p=16637"},"modified":"2025-02-24T13:23:12","modified_gmt":"2025-02-24T13:23:12","slug":"%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-deepseek-%d0%bf%d1%80%d0%b8-%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%b8%d0%b8-ios-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6-2","status":"publish","type":"post","link":"https:\/\/bestkora.com\/IosDeveloper\/%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-deepseek-%d0%bf%d1%80%d0%b8-%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%b8%d0%b8-ios-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6-2\/","title":{"rendered":"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 DeepSeek \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f Countries \u0421\u0442\u0440\u0430\u043d\u044b \u041c\u0438\u0440\u0430. \u0427\u0430\u0441\u0442\u044c 2. \u0427\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u0441\u0435\u043b\u0435\u043d\u0438\u044f, \u0412\u0412\u041f, \u0444\u043b\u0430\u0433."},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u042d\u0442\u043e \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0435. \u041d\u0430\u0447\u0430\u043b\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043f\u043e\u0441\u0442\u0435 <a href=\"https:\/\/bestkora.com\/IosDeveloper\/%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-deepseek-%d0%bf%d1%80%d0%b8-%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%b8%d0%b8-ios-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6\/\" title=\"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 DeepSeek \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f Countries \u0421\u0442\u0440\u0430\u043d\u044b \u041c\u0438\u0440\u0430. \u0427\u0430\u0441\u0442\u044c 1.\">&#171;\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 DeepSeek \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f Countries \u0421\u0442\u0440\u0430\u043d\u044b \u041c\u0438\u0440\u0430. \u0427\u0430\u0441\u0442\u044c 1. \u0421\u043f\u0438\u0441\u043e\u043a \u0441\u0442\u0440\u0430\u043d.&#187;<\/a>.<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u041a\u043e\u0434 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430 <a href=\"https:\/\/github.com\/BestKora\/CountryDeepSeek\" title=\"\">Github.<\/a><\/span><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>\u041a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0440\u0443\u0435\u043c \u043f\u043e\u043b\u044f \u0432 \u0418\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0435&nbsp;<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u0418 \u043e\u043f\u044f\u0442\u044c \u0432&nbsp; \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441 \u043d\u0430\u0441\u0435\u043b\u0435\u043d\u0438\u0435\u043c, \u0412\u0412\u041f, \u0441\u0442\u043e\u043b\u0438\u0446\u044b \u0438 <strong>\u044d\u043c\u043e\u0434\u0437\u0438 <\/strong>\u0444\u043b\u0430\u0433\u0430 \u043c\u044b \u0438\u043c\u0435\u0435\u043c \u041d\u0415\u0412\u0415\u0420\u041d\u042b\u0419 \u043a\u043e\u0434 \u0434\u043b\u044f ResponseMetadata&nbsp;<\/strong><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Roboto-Mono.ttf\" style=\"font-size:.75rem;font-family:Code-Pro-Roboto-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#abb2bf;--cbp-line-number-width:calc(1 * 0.6 * .75rem);line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282c34\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\" struct ResponseMetadata: Decodable {\n            let page: Int\n            let pages: Int\n            let perPage: String\n            let total: Int\n }\" style=\"color:#abb2bf;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki one-dark-pro\" style=\"background-color: #282c34\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">struct<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">ResponseMetadata<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">Decodable <\/span><span style=\"color: #ABB2BF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> page: <\/span><span style=\"color: #E5C07B\">Int<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> pages: <\/span><span style=\"color: #E5C07B\">Int<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> perPage: <\/span><span style=\"color: #E5C07B\">String<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> total: <\/span><span style=\"color: #E5C07B\">Int<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\"> }<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u0432\u043c\u0435\u0441\u0442\u043e <strong>\u041f\u0420\u0410\u0412\u0418\u041b\u042c\u041d\u041e\u0413\u041e:<\/strong><\/span><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Roboto-Mono.ttf\" style=\"font-size:.75rem;font-family:Code-Pro-Roboto-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#abb2bf;--cbp-line-number-width:calc(2 * 0.6 * .75rem);--cbp-line-highlight-color:rgba(134, 167, 228, 0.2);line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282c34\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"struct ResponseMetadata: Decodable {\n            let page: Int\n            let pages: Int\n            let perPage: String\n            let total: Int\n            \n            enum CodingKeys: String, CodingKey {\n                case page, pages, total\n                case perPage = &quot;per_page&quot;\n            }\n }\" style=\"color:#abb2bf;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki one-dark-pro\" style=\"background-color: #282c34\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #C678DD\">struct<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">ResponseMetadata<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">Decodable <\/span><span style=\"color: #ABB2BF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> page: <\/span><span style=\"color: #E5C07B\">Int<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> pages: <\/span><span style=\"color: #E5C07B\">Int<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> perPage: <\/span><span style=\"color: #E5C07B\">String<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> total: <\/span><span style=\"color: #E5C07B\">Int<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">enum<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">CodingKeys<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">String<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #E5C07B\">CodingKey <\/span><span style=\"color: #ABB2BF\">{<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E06C75\">page<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #E06C75\">pages<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #E06C75\">total<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E06C75\">perPage<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #56B6C2\">=<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #98C379\">&quot;per_page&quot;<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #ABB2BF\">            }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\"> }<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u041d\u043e \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u0434, \u043c\u044b \u0432\u0441\u0435 \u0440\u0430\u0432\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0442\u0443 \u0436\u0435 \u0441\u0430\u043c\u0443\u044e \u043e\u0448\u0438\u0431\u043a\u0443: <strong>\u201c The data couldn\u2019t be read because it is missing.\u201d<\/strong><\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u041d\u0435\u0431\u043e\u043b\u044c\u0448\u0430\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0430 \u0438 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 JSON \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u0447\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u043d\u0430\u0441\u0435\u043b\u0435\u043d\u0438\u044f:<\/span><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Roboto-Mono.ttf\" style=\"font-size:.75rem;font-family:Code-Pro-Roboto-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#abb2bf;--cbp-line-number-width:calc(2 * 0.6 * .75rem);--cbp-line-highlight-color:rgba(134, 167, 228, 0.2);line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282c34\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"[ \n {\n    &quot;page&quot;: 1,\n    &quot;pages&quot;: 9,\n    &quot;per_page&quot;: 30,\n    &quot;total&quot;: 266,\n    &quot;sourceid&quot;: &quot;2&quot;,\n    &quot;lastupdated&quot;: &quot;2025-01-28&quot;\n  },\n  [\n    {\n      &quot;indicator&quot;: {\n        &quot;id&quot;: &quot;NY.GDP.MKTP.CD&quot;,\n        &quot;value&quot;: &quot;GDP (current US$)&quot;\n      },\n      &quot;country&quot;: {\n        &quot;id&quot;: &quot;ZH&quot;,\n        &quot;value&quot;: &quot;Africa Eastern and Southern&quot;\n      },\n      &quot;countryiso3code&quot;: &quot;AFE&quot;,\n      &quot;date&quot;: &quot;2022&quot;,\n      &quot;value&quot;: 1191423176242.96,\n      &quot;unit&quot;: &quot;&quot;,\n      &quot;obs_status&quot;: &quot;&quot;,\n      &quot;decimal&quot;: 0\n    },\n....\n  ]\n]\" style=\"color:#abb2bf;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki one-dark-pro\" style=\"background-color: #282c34\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #ABB2BF\">[ <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #98C379\">&quot;page&quot;<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #98C379\">&quot;pages&quot;<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #D19A66\">9<\/span><span style=\"color: #ABB2BF\">,<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #98C379\">&quot;per_page&quot;<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #D19A66\">30<\/span><span style=\"color: #ABB2BF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #98C379\">&quot;total&quot;<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #D19A66\">266<\/span><span style=\"color: #ABB2BF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #98C379\">&quot;sourceid&quot;<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #98C379\">&quot;2&quot;<\/span><span style=\"color: #ABB2BF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #98C379\">&quot;lastupdated&quot;<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #98C379\">&quot;2025-01-28&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">  },<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">  [<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">      <\/span><span style=\"color: #98C379\">&quot;indicator&quot;<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #98C379\">&quot;id&quot;<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #98C379\">&quot;NY.GDP.MKTP.CD&quot;<\/span><span style=\"color: #ABB2BF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #98C379\">&quot;value&quot;<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #98C379\">&quot;GDP (current US$)&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">      },<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">      <\/span><span style=\"color: #98C379\">&quot;country&quot;<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #98C379\">&quot;id&quot;<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #98C379\">&quot;ZH&quot;<\/span><span style=\"color: #ABB2BF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #98C379\">&quot;value&quot;<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #98C379\">&quot;Africa Eastern and Southern&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">      },<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">      <\/span><span style=\"color: #98C379\">&quot;countryiso3code&quot;<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #98C379\">&quot;AFE&quot;<\/span><span style=\"color: #ABB2BF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">      <\/span><span style=\"color: #98C379\">&quot;date&quot;<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #98C379\">&quot;2022&quot;<\/span><span style=\"color: #ABB2BF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">      <\/span><span style=\"color: #98C379\">&quot;value&quot;<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #D19A66\">1191423176242.96<\/span><span style=\"color: #ABB2BF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">      <\/span><span style=\"color: #98C379\">&quot;unit&quot;<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #98C379\">&quot;&quot;<\/span><span style=\"color: #ABB2BF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">      <\/span><span style=\"color: #98C379\">&quot;obs_status&quot;<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #98C379\">&quot;&quot;<\/span><span style=\"color: #ABB2BF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">      <\/span><span style=\"color: #98C379\">&quot;decimal&quot;<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #D19A66\">0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    },<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">....<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">  ]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">]<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u2026 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c, \u0447\u0442\u043e \u043f\u043e\u043b\u044f <code>countryiso2code<\/code>, \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0432 \u041c\u043e\u0434\u0435\u043b\u0438&nbsp; <code>struct Entry,<\/code> <strong>\u041d\u0415\u0422<\/strong> \u0432 JSON \u0434\u0430\u043d\u043d\u044b\u0445, \u0430 \u0435\u0441\u0442\u044c \u043f\u043e\u043b\u0435 <strong><code>countryiso3code<\/code><\/strong>, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f 3-\u0445 \u0431\u0443\u043a\u0432\u0435\u043d\u043d\u044b\u043c IOS \u043a\u043e\u0434\u043e\u043c \u0441\u0442\u0440\u0430\u043d\u044b, \u043d\u043e \u044d\u0442\u043e \u043d\u0435 \u0442\u043e, \u0447\u0442\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e. \u041d\u0430\u043c \u043d\u0443\u0436\u0435\u043d 2-\u0445 \u0431\u0443\u043a\u0432\u0435\u043d\u043d\u044b\u0439 IOS \u043a\u043e\u0434 \u0441\u0442\u0440\u0430\u043d\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 <code>id<\/code> \u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u0435 <code>country<\/code> \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0430, \u0442\u0430\u043a \u0447\u0442\u043e <strong>DeepSeek<\/strong> \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u0443\u0442\u0430\u043b\u0441\u044f. \u0418 \u043d\u0435 \u0437\u0440\u044f, \u043e\u043d \u043d\u0435 \u0440\u0438\u0441\u043a\u043d\u0443\u043b \u0432\u0437\u044f\u0442\u044c <code>id<\/code> \u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u0435 <code>country<\/code> <code><strong>response indicator<\/strong><\/code>, \u0442\u0430\u043a \u043a\u0430\u043a <code>id<\/code> \u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u0435 <code>Country<\/code> <code><strong>response country<\/strong><\/code> &#8212; \u044d\u0442\u043e&nbsp; 3-\u0445 \u0431\u0443\u043a\u0432\u0435\u043d\u043d\u044b\u0439 IOS \u043a\u043e\u0434\u043e\u043c \u0441\u0442\u0440\u0430\u043d\u044b. <mark style=\"background-color:#fbf60c\" class=\"has-inline-color\">\u041d\u0435\u043b\u043e\u0433\u0438\u0447\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f JSON \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 <code>API World Bank <\/code>\u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 &nbsp;<strong>DeepSeek<\/strong> \u0432 \u0437\u0430\u043c\u0435\u0448\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u043e.<\/mark><\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u043e\u043e\u0431\u0449\u0438\u043c \u0435\u043c\u0443 \u043e\u0431 \u044d\u0442\u043e\u043c:<\/span><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-rt.googleusercontent.com\/docsz\/AD_4nXfLfuNbNxfsydGqU2aq-9tugy6B8wC7fkwJaBCxu-7keUh4S9Dd0wgdgFW7xfOBt78-08Fh2hLwKipajzQqMmRuhO7BpLx_vlOVHlWe-g9_P4-KNwTwoNMKgtbKZTmQGeHBvfZ-nA?key=jZ3H_Ic4-xgqXIV3TW-rCUlR\" alt=\"\"\/><\/figure>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td class=\"has-text-align-right\" data-align=\"right\"><span style=\"font-weight: 400;\">\u0412 JSON <code>indicator<\/code> \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0435\u0442 \u043f\u043e\u043b\u044f <code>countryios2code<\/code>. <\/span><br><span style=\"font-weight: 400;\">\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439 <code>id<\/code> \u0438\u0437 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 <code>country<\/code> \u0432 JSON <code>indicator <\/code>\u0434\u0430\u043d\u043d\u044b\u0445.<\/span><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<!--more-->\n\n\n\n<p class=\"wp-block-paragraph\">\u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0440\u0430\u0441\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u043b\u044f\u0442\u0441\u044f 18 \u0441\u0435\u043a\u0443\u043d\u0434:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-rt.googleusercontent.com\/docsz\/AD_4nXcTAqwZNyiDW3TQgr-dq6QWwfB4DFEnCVhAqbrrR-FWGVjTy6dMbouyJMQrSR6gNsO1n2Rgmq_Yn2gijlYZo573eYC9wi7fQ4tg4F7CXeYPunaMSD6Xq614oLK4wuNP7v3gnsfk1Q?key=jZ3H_Ic4-xgqXIV3TW-rCUlR\" alt=\"\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u0412\u043e\u0442 \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u044d\u0442\u0438\u0445 \u0440\u0430\u0441\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u0439:<\/span><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\u0425\u043e\u0440\u043e\u0448\u043e, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c. \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u043b, \u0447\u0442\u043e \u0432 <code>JSON<\/code> \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0430 <code>indicator<\/code> \u043d\u0435\u0442 \u043f\u043e\u043b\u044f <code>countryiso2code<\/code>, \u0438 \u0447\u0442\u043e \u0432\u043c\u0435\u0441\u0442\u043e \u043d\u0435\u0433\u043e \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>id<\/code> \u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u0435 <code>country<\/code>. \u0425\u043c, \u043c\u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0441\u043d\u043e\u0432\u0430 <br><br>\u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u044f \u043f\u0440\u0438\u043f\u043e\u043c\u0438\u043d\u0430\u044e, \u0447\u0442\u043e <code>JSON<\/code> \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0430 <code>indicator<\/code><strong> <\/strong>\u0438\u0437 <code>API<\/code> \u0412\u0441\u0435\u043c\u0438\u0440\u043d\u043e\u0433\u043e \u0431\u0430\u043d\u043a\u0430 \u0438\u043c\u0435\u044e\u0442 \u0434\u0440\u0443\u0433\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443. \u041e\u0441\u043d\u043e\u0432\u043d\u044b\u043c \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u043c \u0441\u0442\u0440\u0430\u043d\u044b <code>country<\/code> \u0442\u0430\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u041d\u0415 <code>countryiso2code<\/code>, \u0430 \u043e\u0431\u044a\u0435\u043a\u0442 <code>country<\/code> \u0441 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u043c <code>id<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e \u0441\u0443\u0442\u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f <code>ISO2<\/code> \u043a\u043e\u0434\u043e\u043c. \u041f\u043e\u0437\u0432\u043e\u043b\u044c\u0442\u0435 \u043c\u043d\u0435 \u044d\u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c.<br><br>\u0420\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u044f \u043f\u0440\u0438\u043c\u0435\u0440 \u043e\u0442\u0432\u0435\u0442\u0430 <code>response<\/code> \u043e\u0442 <code>indicator endpoint<\/code>, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043b\u044f \u0447\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u043d\u0430\u0441\u0435\u043b\u0435\u043d\u0438\u0438 <code>population<\/code>, \u043c\u044b \u0443\u0431\u0435\u0436\u0434\u0430\u0435\u043c\u0441\u044f, \u0447\u0442\u043e \u043a\u0430\u0436\u0434\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c, \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u0438\u043c\u0435\u0435\u0442 \u043e\u0431\u044a\u0435\u043a\u0442 <code>country<\/code>, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 <code>id<\/code><sup> <\/sup>\u0438 <code>value<\/code>. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u043c\u0435\u0441\u0442\u043e <code>countryiso2code<\/code> \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a <code>country.id<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438 \u0431\u0443\u0434\u0435\u0442 <code>ISO2<\/code> \u043a\u043e\u0434\u043e\u043c.<br><br>\u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c \u043a\u043e\u0434\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 <code>struct Entry <\/code>\u0434\u043b\u044f <code>IndicatorResponse<\/code> \u0443\u043a\u0430\u0437\u0430\u043d\u0430 <code>countryiso2code<\/code>, \u043d\u043e \u044d\u0442\u043e <strong>\u043d\u0435\u0432\u0435\u0440\u043d\u043e<\/strong>. \u041f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u043f\u0443\u0442\u044c \u2014 <code>country.id<\/code>. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043a\u043b\u044e\u0447\u0438 \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u0440\u0430\u0437\u0438\u0442\u044c \u044d\u0442\u043e.<br><br>\u041f\u043e\u0437\u0432\u043e\u043b\u044c\u0442\u0435 \u043c\u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 <code>Entry<\/code>. <code>CodingKeys<\/code> \u0434\u043b\u044f <code>Entry<\/code> \u0434\u043e\u043b\u0436\u043d\u044b \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u0442\u044c <code>country<\/code> \u043a\u0430\u043a \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442, \u0430 \u0437\u0430\u0442\u0435\u043c \u0438\u0437\u0432\u043b\u0435\u0447\u044c \u0435\u0433\u043e <code>id<\/code>. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 <code>struct Entry <\/code>\u0434\u043e\u043b\u0436\u043d\u0430 \u0438\u043c\u0435\u0442\u044c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e <code>country<\/code>, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439 <code>struct<\/code> \u0441\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e\u043c <code>id<\/code> \u0438 <code>value<\/code>.<br><br>\u041f\u043e\u0434\u043e\u0436\u0434\u0438\u0442\u0435, \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 <code>JSON<\/code> \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0430 <code>indicator<\/code>, \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/pre>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Roboto-Mono.ttf\" style=\"font-size:.75rem;font-family:Code-Pro-Roboto-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#abb2bf;--cbp-line-number-width:calc(1 * 0.6 * .75rem);line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282c34\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"{\n&quot;country&quot;: {&quot;id&quot;: &quot;US&quot;, &quot;value&quot;: &quot;United States&quot;},\n&quot;value&quot;: 331002651\n}\" style=\"color:#abb2bf;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki one-dark-pro\" style=\"background-color: #282c34\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #ABB2BF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #98C379\">&quot;country&quot;<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> {<\/span><span style=\"color: #98C379\">&quot;id&quot;<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #98C379\">&quot;US&quot;<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #98C379\">&quot;value&quot;<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #98C379\">&quot;United States&quot;<\/span><span style=\"color: #ABB2BF\">},<\/span><\/span>\n<span class=\"line\"><span style=\"color: #98C379\">&quot;value&quot;<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #D19A66\">331002651<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<pre class=\"wp-block-preformatted\">\u041f\u043e\u044d\u0442\u043e\u043c\u0443 <code>struct Entry<\/code> \u0434\u043e\u043b\u0436\u043d\u0430 \u0438\u043c\u0435\u0442\u044c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 <code>struct Country<\/code> \u0441 <code>id<\/code>, \u0430 \u043d\u0435 <code>countryiso2code<\/code>. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 <code>struct Entry <\/code>\u0443 \u043c\u0435\u043d\u044f \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c:<\/pre>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Roboto-Mono.ttf\" style=\"font-size:.75rem;font-family:Code-Pro-Roboto-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#abb2bf;--cbp-line-number-width:calc(1 * 0.6 * .75rem);line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282c34\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"struct Entry: Decodable {\n    let country: Country\n    let value: Double?\n\n\n    struct Country: Decodable {\n        let id: String\n    }\n }\" style=\"color:#abb2bf;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki one-dark-pro\" style=\"background-color: #282c34\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #C678DD\">struct<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">Entry<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">Decodable <\/span><span style=\"color: #ABB2BF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> country: Country<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> value: <\/span><span style=\"color: #E5C07B\">Double<\/span><span style=\"color: #ABB2BF\">?<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">struct<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">Country<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">Decodable <\/span><span style=\"color: #ABB2BF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> id: <\/span><span style=\"color: #E5C07B\">String<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\"> }<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<pre class=\"wp-block-preformatted\">\u0417\u0430\u0442\u0435\u043c \u043f\u0440\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 <code>Entry<\/code> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 <code>country.id<\/code> \u0432\u043c\u0435\u0441\u0442\u043e <code>countryiso2code<\/code>.<br>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>func fetchIndicatorData<\/code> \u043f\u0440\u0438 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u0441\u043b\u043e\u0432\u0430\u0440\u044f <code>dictionary<\/code> \u043a\u043b\u044e\u0447\u043e\u043c \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f <code>entry.country.id.<\/code><br><br>\u041f\u043e\u0434\u043e\u0436\u0434\u0438\u0442\u0435, \u043d\u043e \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c \u043a\u043e\u0434\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b <code>countryiso2code<\/code>, \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442. \u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u044d\u0442\u043e\u0433\u043e \u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0433\u043e <code>country.id <\/code>\u0434\u043e\u043b\u0436\u043d\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443.<br><br>\u041f\u043e\u0437\u0432\u043e\u043b\u044c\u0442\u0435 \u043c\u043d\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0441\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 <code>struct Entry<\/code> \u0432 <code>IndicatorResponse<\/code>. \u0422\u0430\u043a\u0436\u0435 \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u0435 <code>CodingKeys<\/code>. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043a\u043b\u044e\u0447\u0430\u043c\u0438 <code>JSON<\/code> \u0434\u0430\u043d\u043d\u044b\u0445 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f <code>country<\/code> \u0438 <code>value<\/code>, \u043d\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0432 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 <code>CodingKeys<\/code>, \u0442\u0430\u043a \u043a\u0430\u043a \u0438\u043c\u0435\u043d\u0430 \u0441\u0432\u043e\u0439\u0441\u0442\u0432 \u043d\u0435 \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f.<br><br>\u041a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e, \u043a\u043e\u0434 \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c <code>ISO2<\/code> \u043a\u043e\u0434\u044b \u0441\u0442\u0440\u0430\u043d \u0438\u0437 \u043f\u043e\u043b\u044f <code>country.id <\/code>\u0432 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0430 <code>indicator<\/code>.<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">\u0422\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u044d\u0442\u043e\u0433\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u043d\u0430\u0441\u0435\u043b\u0435\u043d\u0438\u0438 <code>population<\/code> \u0438 \u0412\u0412\u041f <code>gdp<\/code> \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0430\u0441\u0441\u043e\u0446\u0438\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0441 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u043c\u0438 \u0441\u0442\u0440\u0430\u043d\u0430\u043c\u0438 <code>country<\/code> \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0438\u0445 <code>ISO2<\/code> \u043a\u043e\u0434\u043e\u0432 \u0438\u0437 \u043f\u043e\u043b\u044f <code>id<\/code> \u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u0435 <code>country<\/code> \u043a\u0430\u0436\u0434\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0430 <code>indicator<\/code>.<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u0414\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0432\u044b\u0434\u0430\u0435\u0442\u0441\u044f:<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u0412\u044b \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u043f\u0440\u0430\u0432\u044b \u2014 \u044f \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043b \u043e\u0448\u0438\u0431\u043a\u0443 \u0432 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0430 <code>indicator<\/code>. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u043c \u044d\u0442\u043e, \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0432 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0443 \u0441\u0442\u0440\u0430\u043d\u044b <code>id<\/code> \u0438\u0437 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 <code>country<\/code> \u0432 \u043e\u0442\u0432\u0435\u0442\u0430\u0445 <code>response<\/code> \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0430 <code>indicator<\/code>. \u0412\u043e\u0442 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f:<\/span><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Roboto-Mono.ttf\" style=\"font-size:.75rem;font-family:Code-Pro-Roboto-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#abb2bf;--cbp-line-number-width:calc(2 * 0.6 * .75rem);line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282c34\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"class CountryViewModel: ObservableObject {\n    \/\/ ... keep previous properties and other methods unchanged ...\n\n    private func fetchIndicatorData(url: String) async throws -&gt; [String: Double] {\n        struct IndicatorResponse: Decodable {\n            let entries: [Entry]\n            \n            init(from decoder: Decoder) throws {\n                var container = try decoder.unkeyedContainer()\n                _ = try container.decode(ResponseMetadata.self)\n                entries = try container.decode([Entry].self)\n            }\n            \n            struct Entry: Decodable {\n                let country: Country\n                let value: Double?\n                \n                struct Country: Decodable {\n                    let id: String  \/\/ This is the ISO2 code\n                }\n            }\n        }\n        \n        let (data, _) = try await URLSession.shared.data(from: \n                                                         URL(string: url)!)\n        let response = try JSONDecoder().decode(IndicatorResponse.self, \n                                                               from: data)\n        \n        return response.entries.reduce(into: [:]) { dict, entry in\n            guard let value = entry.value else { return }\n            dict[entry.country.id] = value\n        }\n    }\n}\" style=\"color:#abb2bf;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki one-dark-pro\" style=\"background-color: #282c34\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #C678DD\">class<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">CountryViewModel<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">ObservableObject <\/span><span style=\"color: #ABB2BF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ ... keep previous properties and other methods unchanged ...<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">private<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">func<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">fetchIndicatorData<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF; font-style: italic\">url<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">String<\/span><span style=\"color: #ABB2BF\">) <\/span><span style=\"color: #C678DD\">async<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">throws<\/span><span style=\"color: #ABB2BF\"> -&gt; [<\/span><span style=\"color: #E5C07B\">String<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">Double<\/span><span style=\"color: #ABB2BF\">] {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">struct<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">IndicatorResponse<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">Decodable <\/span><span style=\"color: #ABB2BF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> entries: [Entry]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">init<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">from<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #ABB2BF; font-style: italic\">decoder<\/span><span style=\"color: #ABB2BF\">: Decoder) <\/span><span style=\"color: #C678DD\">throws<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #C678DD\">var<\/span><span style=\"color: #ABB2BF\"> container = <\/span><span style=\"color: #C678DD\">try<\/span><span style=\"color: #ABB2BF\"> decoder.<\/span><span style=\"color: #61AFEF\">unkeyedContainer<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                _ = <\/span><span style=\"color: #C678DD\">try<\/span><span style=\"color: #ABB2BF\"> container.<\/span><span style=\"color: #56B6C2\">decode<\/span><span style=\"color: #ABB2BF\">(ResponseMetadata.<\/span><span style=\"color: #C678DD\">self<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                entries = <\/span><span style=\"color: #C678DD\">try<\/span><span style=\"color: #ABB2BF\"> container.<\/span><span style=\"color: #56B6C2\">decode<\/span><span style=\"color: #ABB2BF\">([Entry].<\/span><span style=\"color: #C678DD\">self<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">struct<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">Entry<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">Decodable <\/span><span style=\"color: #ABB2BF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> country: Country<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> value: <\/span><span style=\"color: #E5C07B\">Double<\/span><span style=\"color: #ABB2BF\">?<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #C678DD\">struct<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">Country<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">Decodable <\/span><span style=\"color: #ABB2BF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                    <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> id: <\/span><span style=\"color: #E5C07B\">String<\/span><span style=\"color: #ABB2BF\">  <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ This is the ISO2 code<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> (data, _) = <\/span><span style=\"color: #C678DD\">try<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">await<\/span><span style=\"color: #ABB2BF\"> URLSession.<\/span><span style=\"color: #E06C75\">shared<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #61AFEF\">data<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">from<\/span><span style=\"color: #ABB2BF\">: <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                                                         <\/span><span style=\"color: #61AFEF\">URL<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">string<\/span><span style=\"color: #ABB2BF\">: url)!)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> response = <\/span><span style=\"color: #C678DD\">try<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">JSONDecoder<\/span><span style=\"color: #ABB2BF\">().<\/span><span style=\"color: #56B6C2\">decode<\/span><span style=\"color: #ABB2BF\">(IndicatorResponse.<\/span><span style=\"color: #C678DD\">self<\/span><span style=\"color: #ABB2BF\">, <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                                                               <\/span><span style=\"color: #61AFEF\">from<\/span><span style=\"color: #ABB2BF\">: data)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> response.<\/span><span style=\"color: #E06C75\">entries<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #56B6C2\">reduce<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">into<\/span><span style=\"color: #ABB2BF\">: [<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\">]) { dict, entry <\/span><span style=\"color: #C678DD\">in<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">guard<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> value = entry.value <\/span><span style=\"color: #C678DD\">else<\/span><span style=\"color: #ABB2BF\"> { <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            dict[entry.<\/span><span style=\"color: #E06C75\">country<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #E06C75\">id<\/span><span style=\"color: #ABB2BF\">] = value<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u041a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0438 \u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435<code> IndicatorResponse.Entry,<\/code> \u0433\u0434\u0435 \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u0443\u0435\u043c \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 <code>country<\/code>:<\/span><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Roboto-Mono.ttf\" style=\"font-size:.75rem;font-family:Code-Pro-Roboto-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#abb2bf;--cbp-line-number-width:calc(1 * 0.6 * .75rem);line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282c34\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"struct Entry: Decodable {\n    let country: Country\n    let value: Double?\n    \n    struct Country: Decodable {\n        let id: String  \/\/ ISO2 code from indicator data\n    }\n}\" style=\"color:#abb2bf;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki one-dark-pro\" style=\"background-color: #282c34\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #C678DD\">struct<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">Entry<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">Decodable <\/span><span style=\"color: #ABB2BF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> country: Country<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> value: <\/span><span style=\"color: #E5C07B\">Double<\/span><span style=\"color: #ABB2BF\">?<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">struct<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">Country<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">Decodable <\/span><span style=\"color: #ABB2BF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> id: <\/span><span style=\"color: #E5C07B\">String<\/span><span style=\"color: #ABB2BF\">  <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ ISO2 code from indicator data<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u042d\u0442\u043e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 \u043e\u0442\u0432\u0435\u0442\u0430 response <code>API<\/code> \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0430 <code>indicator <\/code>\u0412\u0441\u0435\u043c\u0438\u0440\u043d\u043e\u0433\u043e \u0431\u0430\u043d\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c (<mark style=\"background-color:#f9f70e\" class=\"has-inline-color\">\u043f\u043e\u0437\u0436\u0435 \u043c\u044b \u0443\u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u043e\u0448\u0438\u0431\u043e\u0447\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u043e, \u0447\u0442\u043e <code>per_page<\/code> \u0432 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 indicator \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f <strong>String<\/strong>, a \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u044d\u0442\u043e&nbsp;<strong> Int <\/strong>):<\/mark><\/span><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Roboto-Mono.ttf\" style=\"font-size:.75rem;font-family:Code-Pro-Roboto-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#abb2bf;--cbp-line-number-width:calc(2 * 0.6 * .75rem);--cbp-line-highlight-color:rgba(134, 167, 228, 0.2);line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282c34\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"[\n  {\n    &quot;page&quot;: 1,\n    &quot;pages&quot;: 5,\n    &quot;per_page&quot;: &quot;50&quot;,\n    &quot;total&quot;: 299\n  },\n  [\n    {\n      &quot;indicator&quot;: {&quot;id&quot;: &quot;SP.POP.TOTL&quot;, &quot;value&quot;: &quot;Population, total&quot;},\n      &quot;country&quot;: {&quot;id&quot;: &quot;US&quot;, &quot;value&quot;: &quot;United States&quot;},\n      &quot;value&quot;: 331002651,\n      &quot;decimal&quot;: &quot;0&quot;,\n      &quot;date&quot;: &quot;2021&quot;\n    },\n    \/\/ ... other entries\n  ]\n]\" style=\"color:#abb2bf;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki one-dark-pro\" style=\"background-color: #282c34\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #ABB2BF\">[<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">  {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #98C379\">&quot;page&quot;<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #98C379\">&quot;pages&quot;<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #D19A66\">5<\/span><span style=\"color: #ABB2BF\">,<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #98C379\">&quot;per_page&quot;<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #98C379\">&quot;50&quot;<\/span><span style=\"color: #ABB2BF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #98C379\">&quot;total&quot;<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #D19A66\">299<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">  },<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">  [<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">      <\/span><span style=\"color: #98C379\">&quot;indicator&quot;<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> {<\/span><span style=\"color: #98C379\">&quot;id&quot;<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #98C379\">&quot;SP.POP.TOTL&quot;<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #98C379\">&quot;value&quot;<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #98C379\">&quot;Population, total&quot;<\/span><span style=\"color: #ABB2BF\">},<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">      <\/span><span style=\"color: #98C379\">&quot;country&quot;<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> {<\/span><span style=\"color: #98C379\">&quot;id&quot;<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #98C379\">&quot;US&quot;<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #98C379\">&quot;value&quot;<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #98C379\">&quot;United States&quot;<\/span><span style=\"color: #ABB2BF\">},<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">      <\/span><span style=\"color: #98C379\">&quot;value&quot;<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #D19A66\">331002651<\/span><span style=\"color: #ABB2BF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">      <\/span><span style=\"color: #98C379\">&quot;decimal&quot;<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #98C379\">&quot;0&quot;<\/span><span style=\"color: #ABB2BF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">      <\/span><span style=\"color: #98C379\">&quot;date&quot;<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #98C379\">&quot;2021&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    },<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ ... other entries<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">  ]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">]<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u041e\u0441\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u043a\u043e\u0434\u0430 \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0435\u0436\u043d\u0435\u0439, \u043d\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044c\u0442\u0435 \u043c\u043d\u0435 \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u0432\u0430\u0436\u043d\u044b\u0435 \u0441\u0432\u044f\u0437\u0438:<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">1. <strong>\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u0441\u0442\u0440\u0430\u043d\u044b:<\/strong><\/span><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><span style=\"font-weight: 400;\">\u0411\u0430\u0437\u043e\u0432\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u0442\u0440\u0430\u043d\u044b Country \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u043f\u043e\u043b\u0435 iso2Code<\/span><\/li>\n\n\n\n<li><span style=\"font-weight: 400;\">\u0414\u0430\u043d\u043d\u044b\u0435 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0430 indicator \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u043f\u043e\u043b\u0435 country.id<\/span><\/li>\n\n\n\n<li><span style=\"font-weight: 400;\">\u041e\u0431\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442&nbsp; ISO2 \u043a\u043e\u0434\u044b \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0434\u043b\u044f \u0432\u0437\u0430\u0438\u043c\u043e\u0441\u0432\u044f\u0437\u0438<\/span><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">2. <strong>\u041e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435&nbsp; \u0434\u0430\u043d\u043d\u044b\u0445:<\/strong><\/span><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Roboto-Mono.ttf\" style=\"font-size:.75rem;font-family:Code-Pro-Roboto-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#abb2bf;--cbp-line-number-width:calc(1 * 0.6 * .75rem);--cbp-line-highlight-color:rgba(134, 167, 228, 0.2);line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282c34\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"finalCountries = finalCountries.map { country in\n    var modified = country\n    modified.population = populationDict[country.iso2Code]\n    modified.gdp = gdpDict[country.iso2Code]\n    return modified\n}\" style=\"color:#abb2bf;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki one-dark-pro\" style=\"background-color: #282c34\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #ABB2BF\">finalCountries = finalCountries.<\/span><span style=\"color: #56B6C2\">map<\/span><span style=\"color: #ABB2BF\"> { country <\/span><span style=\"color: #C678DD\">in<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">var<\/span><span style=\"color: #ABB2BF\"> modified = country<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #ABB2BF\">    modified.<\/span><span style=\"color: #E06C75\">population<\/span><span style=\"color: #ABB2BF\"> = populationDict[country.<\/span><span style=\"color: #E06C75\">iso2Code<\/span><span style=\"color: #ABB2BF\">]<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #ABB2BF\">    modified.<\/span><span style=\"color: #E06C75\">gdp<\/span><span style=\"color: #ABB2BF\"> = gdpDict[country.<\/span><span style=\"color: #E06C75\">iso2Code<\/span><span style=\"color: #ABB2BF\">]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> modified<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">3. <strong>\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043e\u0448\u0438\u0431\u043e\u043a<\/strong><\/span><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Roboto-Mono.ttf\" style=\"font-size:.75rem;font-family:Code-Pro-Roboto-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#abb2bf;--cbp-line-number-width:calc(1 * 0.6 * .75rem);line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282c34\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"guard let value = entry.value \/\/\u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0437\u0430\u043f\u0438\u0441\u0438 \u0431\u0435\u0437 \u0434\u0430\u043d\u043d\u044b\u0445\" style=\"color:#abb2bf;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki one-dark-pro\" style=\"background-color: #282c34\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #C678DD\">guard<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> value = entry.value <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/\u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0437\u0430\u043f\u0438\u0441\u0438 \u0431\u0435\u0437 \u0434\u0430\u043d\u043d\u044b\u0445<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<ul class=\"wp-block-list\">\n<li><span style=\"font-weight: 400;\">\u041c\u0435\u0442\u043e\u0434 <code>reduce<\/code> \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u0441\u043b\u043e\u0432\u0430\u0440\u044c<\/span><\/li>\n\n\n\n<li><span style=\"font-weight: 400;\">\u0412 \u043e\u043a\u043e\u043d\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u0441\u043f\u0438\u0441\u043a\u0435 \u0441\u0442\u0440\u0430\u043d <code>filtered<\/code> \u0444\u0438\u043b\u044c\u0442\u0440\u0443\u044e\u0442\u0441\u044f \u0441\u0442\u0440\u0430\u043d\u044b \u0441 \u043f\u0443\u0441\u0442\u044b\u043c\u0438 \u0441\u0442\u043e\u043b\u0438\u0446\u0430\u043c\u0438<\/span><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u042d\u0442\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442, \u0447\u0442\u043e \u043c\u044b \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u043c <code>ISO2<\/code> \u043a\u043e\u0434\u044b \u0441\u0442\u0440\u0430\u043d \u0438\u0437 \u043e\u0431\u043e\u0438\u0445 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445:<\/span><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><span style=\"font-weight: 400;\">\u0418\u0437 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 <code><strong>country endpoint<\/strong><\/code>: <code><mark style=\"background-color:#fae542\" class=\"has-inline-color\">iso2Code<\/mark><\/code><\/span><\/li>\n\n\n\n<li><span style=\"font-weight: 400;\">\u0418\u0437<code><strong> indicator endpoint<\/strong><\/code>: <code><mark style=\"background-color:#f5ea64\" class=\"has-inline-color\">country.id<\/mark><\/code><\/span><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u041e\u0441\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c&nbsp; <code>UI <\/code>\u0438 \u043c\u043e\u0434\u0435\u043b\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u0441\u0442\u0430\u044e\u0442\u0441\u044f \u043d\u0435\u0438\u0437\u043c\u0435\u043d\u043d\u043e\u0439, \u043d\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0441\u043e \u0441\u0442\u0440\u0430\u043d\u0430\u043c\u0438 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0438\u0445 <code>ISO2<\/code> \u043a\u043e\u0434\u043e\u0432.<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435&nbsp; \u0438 \u043c\u044b \u0432\u0441\u0435 \u0440\u0430\u0432\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0442\u0443 \u0436\u0435 \u0441\u0430\u043c\u0443\u044e \u043e\u0448\u0438\u0431\u043a\u0443: <strong>\u201c The data couldn\u2019t be read because it is missing.\u201d<\/strong><\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u041d\u0435\u0431\u043e\u043b\u044c\u0448\u0430\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0430 \u0438 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u201c\u0436\u0438\u0432\u044b\u0445\u201d <code>JSON<\/code> \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u0447\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u043d\u0430\u0441\u0435\u043b\u0435\u043d\u0438\u044f:<\/span><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Roboto-Mono.ttf\" style=\"font-size:.75rem;font-family:Code-Pro-Roboto-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#abb2bf;--cbp-line-number-width:calc(2 * 0.6 * .75rem);--cbp-line-highlight-color:rgba(134, 167, 228, 0.2);line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282c34\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"[\n\u00a0 {\n\u00a0 \u00a0 &quot;page&quot;: 1,\n\u00a0 \u00a0 &quot;pages&quot;: 9,\n\u00a0 \u00a0 &quot;per_page&quot;: 30,\n\u00a0 \u00a0 &quot;total&quot;: 266,\n\u00a0 \u00a0 &quot;sourceid&quot;: &quot;2&quot;,\n\u00a0 \u00a0 &quot;lastupdated&quot;: &quot;2025-01-28&quot;\n\u00a0 },\n\u00a0 [\n\u00a0 \u00a0 {\n\u00a0 \u00a0 \u00a0 &quot;indicator&quot;: {&quot;id&quot;: &quot;SP.POP.TOTL&quot;, &quot;value&quot;: &quot;Population, total&quot;},\n\u00a0 \u00a0 \u00a0 &quot;country&quot;: {&quot;id&quot;: &quot;US&quot;, &quot;value&quot;: &quot;United States&quot;},\n\u00a0 \u00a0 \u00a0 &quot;value&quot;: 331002651,\n\u00a0 \u00a0 \u00a0 &quot;decimal&quot;: &quot;0&quot;,\n\u00a0 \u00a0 \u00a0 &quot;date&quot;: &quot;2021&quot;\n\u00a0 \u00a0 },\n\u00a0 \u00a0 \/\/ ... other entries\n\u00a0 ]\n]\" style=\"color:#abb2bf;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki one-dark-pro\" style=\"background-color: #282c34\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #ABB2BF\">[<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">\u00a0 {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">\u00a0 \u00a0 <\/span><span style=\"color: #98C379\">&quot;page&quot;<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">\u00a0 \u00a0 <\/span><span style=\"color: #98C379\">&quot;pages&quot;<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #D19A66\">9<\/span><span style=\"color: #ABB2BF\">,<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #ABB2BF\">\u00a0 \u00a0 <\/span><span style=\"color: #98C379\">&quot;per_page&quot;<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #D19A66\">30<\/span><span style=\"color: #ABB2BF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">\u00a0 \u00a0 <\/span><span style=\"color: #98C379\">&quot;total&quot;<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #D19A66\">266<\/span><span style=\"color: #ABB2BF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">\u00a0 \u00a0 <\/span><span style=\"color: #98C379\">&quot;sourceid&quot;<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #98C379\">&quot;2&quot;<\/span><span style=\"color: #ABB2BF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">\u00a0 \u00a0 <\/span><span style=\"color: #98C379\">&quot;lastupdated&quot;<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #98C379\">&quot;2025-01-28&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">\u00a0 },<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">\u00a0 [<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">\u00a0 \u00a0 {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">\u00a0 \u00a0 \u00a0 <\/span><span style=\"color: #98C379\">&quot;indicator&quot;<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> {<\/span><span style=\"color: #98C379\">&quot;id&quot;<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #98C379\">&quot;SP.POP.TOTL&quot;<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #98C379\">&quot;value&quot;<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #98C379\">&quot;Population, total&quot;<\/span><span style=\"color: #ABB2BF\">},<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">\u00a0 \u00a0 \u00a0 <\/span><span style=\"color: #98C379\">&quot;country&quot;<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> {<\/span><span style=\"color: #98C379\">&quot;id&quot;<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #98C379\">&quot;US&quot;<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #98C379\">&quot;value&quot;<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #98C379\">&quot;United States&quot;<\/span><span style=\"color: #ABB2BF\">},<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">\u00a0 \u00a0 \u00a0 <\/span><span style=\"color: #98C379\">&quot;value&quot;<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #D19A66\">331002651<\/span><span style=\"color: #ABB2BF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">\u00a0 \u00a0 \u00a0 <\/span><span style=\"color: #98C379\">&quot;decimal&quot;<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #98C379\">&quot;0&quot;<\/span><span style=\"color: #ABB2BF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">\u00a0 \u00a0 \u00a0 <\/span><span style=\"color: #98C379\">&quot;date&quot;<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #98C379\">&quot;2021&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">\u00a0 \u00a0 },<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">\u00a0 \u00a0 <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ ... other entries<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">\u00a0 ]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">]<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u2026 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u043f\u043e\u043b\u0435 &#171;<code>per_page<\/code>&#187; \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0446\u0435\u043b\u044b\u043c \u0447\u0438\u0441\u043b\u043e\u043c <code>Int<\/code> \u0432 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 <code>indicator<\/code>, \u0432 \u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u0430\u043a \u0432 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 <code>country<\/code> \u044d\u0442\u043e \u0441\u0442\u0440\u043e\u043a\u0430 <code>String<\/code>. \u0421\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0434\u043b\u044f \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 <code>IndicatorResponseMetadata<\/code> \u0434\u043e\u043b\u0436\u043d\u0430 \u043e\u0442\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f \u043e\u0442 <code>ResponseMetadata<\/code>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u0435\u0439\u0447\u0430\u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 <code>indicator<\/code>. \u0415\u0449\u0435 \u0440\u0430\u0437 \u0443\u0431\u0435\u0436\u0434\u0430\u0435\u043c\u0441\u044f, \u0447\u0442\u043e <mark style=\"background-color:#e8f60d\" class=\"has-inline-color\">\u0418\u0418 \u043f\u043b\u043e\u0445\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0441 \u043f\u043b\u043e\u0445\u043e \u0441\u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u043e\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u043c\u0438.<\/mark><\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u043e\u043e\u0431\u0449\u0438\u043c \u043e\u0431 \u044d\u0442\u043e\u043c <strong>DeepSeek<\/strong>:<\/span><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-rt.googleusercontent.com\/docsz\/AD_4nXepZGVZ9EPnsVEbNCIFwiecSV9ZjTJIT_f6T4IYZYiDbF5zoTdZNfL8HTcdmktvB8C9rI2swu3dwKqj-b6Dp6SVp3Sm-tOIMpnEUNjP3qVtR7Uu96wfVCzcU-aRqGXs7myaxvmHRA?key=jZ3H_Ic4-xgqXIV3TW-rCUlR\" alt=\"\"\/><\/figure>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td class=\"has-text-align-right\" data-align=\"right\"><span style=\"font-weight: 400;\"><code>IndicatorResponseMetadata<\/code> \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 <code>ResponseMetadata<\/code>: <\/span><br><span style=\"font-weight: 400;\">\u043f\u043e\u043b\u0435 <code><strong>per_page<\/strong><\/code> \u0432&nbsp; <code>ResponseMetadata<\/code> \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0442\u0440\u043e\u043a\u043e\u0439 <code><strong>String<\/strong><\/code>, <\/span><br><span style=\"font-weight: 400;\">a \u043f\u043e\u043b\u0435 <code><strong>per_page <\/strong><\/code>\u0432 <code>IndicatorResponseMetadata<\/code>&nbsp; \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0446\u0435\u043b\u044b\u043c \u0447\u0438\u0441\u043b\u043e\u043c <code><strong>Int<\/strong><\/code><\/span><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0440\u0430\u0441\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u043b\u044f\u0442\u0441\u044f 19 \u0441\u0435\u043a\u0443\u043d\u0434:<\/span><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-rt.googleusercontent.com\/docsz\/AD_4nXdfF6lHZ7_kyKrBBTL0s8KbAEYKRu1-pfA_RWIoW3_eCGmvjeIn3UcUjEtfVmQMddSoUpjVPWT8z5qwqtMVcG5vuBYN_xF5cQdMCiq_8Z6iX7KgUkZEVx_6aT6TVX-kGsixPwnv6w?key=jZ3H_Ic4-xgqXIV3TW-rCUlR\" alt=\"\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u0412\u043e\u0442 \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u044d\u0442\u0438\u0445 \u0440\u0430\u0441\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u0439:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\u0425\u043e\u0440\u043e\u0448\u043e, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0437\u0430\u0439\u043c\u0435\u043c\u0441\u044f \u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439. \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0443\u043a\u0430\u0437\u0430\u043b \u043d\u0430 \u043d\u0435\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u043f\u043e\u043b\u044f\u043c\u0438 `<code>per_page<\/code>` \u0432 \u0434\u0432\u0443\u0445 \u0440\u0430\u0437\u043d\u044b\u0445 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u0445 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u0442\u0432\u0435\u0442\u0430. \u0412 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c `<code>ResponseMetadata<\/code>` `<code>per_page<\/code>` \u2014 \u044d\u0442\u043e <code>String<\/code>, \u043d\u043e \u0432 `<code>IndicatorResponseMetadata<\/code>` \u2014 \u044d\u0442\u043e <code>Int<\/code>. \u042d\u0442\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0443 \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0441\u0442\u0440\u043e\u0433\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0442\u0438\u043f\u043e\u0432 <code>Swift<\/code> \u043e\u0436\u0438\u0434\u0430\u0435\u0442, \u0447\u0442\u043e \u0422\u0418\u041f\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0442\u043e\u0447\u043d\u043e \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0442\u044c.<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">\u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u043c\u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b <code>API<\/code> \u043e\u0442\u0432\u0435\u0442\u043e\u0432 <code>response<\/code> \u0412\u0441\u0435\u043c\u0438\u0440\u043d\u043e\u0433\u043e \u0431\u0430\u043d\u043a\u0430. \u041f\u043e\u0437\u0432\u043e\u043b\u044c\u0442\u0435 \u043c\u043d\u0435 \u043d\u0430\u043f\u043e\u043c\u043d\u0438\u0442\u044c, \u0447\u0442\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f <code><strong>country endpoint<\/strong><\/code><strong> <\/strong>\u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 `<code>per_page<\/code>` \u043a\u0430\u043a <code><strong>String<\/strong><\/code>, \u0432 \u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u0430\u043a <code><strong>indicator endpoin<\/strong>t<\/code><strong> <\/strong>\u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442 `<code>per_page<\/code>` \u043a\u0430\u043a <code><strong>Int<\/strong><\/code>. \u042d\u0442\u043e \u043d\u0435\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 \u0432 \u0434\u0438\u0437\u0430\u0439\u043d\u0435 <code>API<\/code> \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043f\u0440\u0438\u0447\u0438\u043d\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b.<br><br>\u0427\u0442\u043e\u0431\u044b \u0440\u0435\u0448\u0438\u0442\u044c \u044d\u0442\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443, \u044f \u043d\u0435 \u043c\u043e\u0433\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0434\u043d\u0443 \u0438 \u0442\u0443 \u0436\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 `<code>ResponseMetadata<\/code>` \u0434\u043b\u044f \u043e\u0431\u043e\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u0435\u0432. \u0412\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u043c\u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u043e\u0442\u0432\u0435\u0442\u0430. \u0414\u043b\u044f \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430 \u0441\u0442\u0440\u0430\u043d \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u043c\u0435\u044e\u0442 `per_page` \u043a\u0430\u043a \u0441\u0442\u0440\u043e\u043a\u0443 <code><mark style=\"background-color:#faff49\" class=\"has-inline-color\">String<\/mark><\/code>, \u0430 \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0430 \u2014 \u044d\u0442\u043e <code><mark style=\"background-color:#f6ed20\" class=\"has-inline-color\">Int<\/mark><\/code>.<br><br>\u0418\u0442\u0430\u043a, \u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e \u0434\u0432\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b: `<code>CountryResponseMetadata<\/code>` \u0438 `<code>IndicatorResponseMetadata<\/code>`. \u041a\u0430\u0436\u0434\u0430\u044f \u0431\u0443\u0434\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u0422\u0418\u041f \u0434\u043b\u044f `<code>per_page<\/code>`. \u0417\u0430\u0442\u0435\u043c \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e <code>API<\/code> \u0432\u044b\u0437\u043e\u0432\u0430 \u044f \u0431\u0443\u0434\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445.<br><br>\u0412 \u043c\u0435\u0442\u043e\u0434\u0435 `<code>fetchCountries<\/code>` \u043f\u0440\u0438 \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043e \u0441\u0442\u0440\u0430\u043d\u0430\u0445 \u044f \u0431\u0443\u0434\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c `<code>CountryResponseMetadata<\/code>`. \u0412 \u043c\u0435\u0442\u043e\u0434\u0435 `<code>fetchIndicatorData<\/code>` \u044f \u0431\u0443\u0434\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c `<code>IndicatorResponseMetadata<\/code>` \u0434\u043b\u044f \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0430. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043a\u0430\u0436\u0434\u044b\u0439 \u043e\u0442\u0432\u0435\u0442 <code><strong>response<\/strong><\/code> \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u043c\u0438 \u0422\u0418\u041f\u0430\u043c\u0438, \u043f\u0440\u0435\u0434\u043e\u0442\u0432\u0440\u0430\u0449\u0430\u044f \u043b\u044e\u0431\u044b\u0435 \u043d\u0435\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u044f.<br><br>\u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043c\u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0432\u0441\u0435 \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 `<code>ResponseMetadata<\/code>` \u0432 \u043a\u043e\u0434\u0435 \u0437\u0430\u043c\u0435\u043d\u0435\u043d\u044b \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 `<code>WorldBankResponse<\/code>` \u043d\u0435 \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0439 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 <code><strong>unkeyedContainer<\/strong><\/code> \u0434\u043e\u043b\u0436\u0435\u043d \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u0442\u044c `<code>CountryResponseMetadata<\/code>`, a \u0432 `<code>IndicatorResponse<\/code>` - \u044d\u0442\u043e `<code>IndicatorResponseMetadata<\/code>` \u0432\u043c\u0435\u0441\u0442\u043e \u043f\u0440\u0435\u0436\u043d\u0435\u0433\u043e `<code>ResponseMetadata<\/code>`.<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">\u0422\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u044d\u0442\u043e\u0433\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0438\u043c\u0435\u0435\u0442 \u0440\u0435\u0448\u0430\u044e\u0449\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u041c\u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u043c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u0430 <code>API<\/code> \u043e\u0442\u0432\u0435\u0442\u0430, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044c, \u0447\u0442\u043e \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0431\u0435\u0437 \u043e\u0448\u0438\u0431\u043e\u043a. \u0415\u0441\u043b\u0438 \u043f\u043e\u043b\u0435 `<code>per_page<\/code>` \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043a\u0430\u043a <code>String<\/code> \u0438\u043b\u0438 <code>Int<\/code> \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 <code><strong>endpoint<\/strong><\/code>, \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0440\u0435\u0448\u0435\u043d\u0430.<br><br>\u0415\u0449\u0435 \u043e\u0434\u043d\u043e \u0441\u043e\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u2014 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043e\u0448\u0438\u0431\u043e\u043a. \u0415\u0441\u043b\u0438 \u0432&nbsp; <code>API<\/code> \u043e\u0442\u0432\u0435\u0442\u0430\u0445 <code>response<\/code> \u0435\u0441\u0442\u044c \u043a\u0430\u043a\u0438\u0435-\u043b\u0438\u0431\u043e \u0434\u0440\u0443\u0433\u0438\u0435 \u043d\u0435\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u044f, \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0438\u0445 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c. \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0431\u043e\u043b\u0435\u0435 \u043e\u043f\u0438\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0430\u0445 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043c\u043e\u0447\u044c \u0432 \u043e\u0442\u043b\u0430\u0434\u043a\u0435 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c.<br><br>\u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u044f \u043e\u0431\u043d\u043e\u0432\u043b\u044e \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u044b \u043a\u043e\u0434\u0430, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e, \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u044b\u0434\u0435\u043b\u0438\u0432 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f\u0445 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u0438 \u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u042d\u0442\u043e \u0447\u0435\u0442\u043a\u043e\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442, \u0447\u0442\u043e \u043a\u0430\u0436\u0434\u0430\u044f \u0447\u0430\u0441\u0442\u044c <code>API<\/code> \u043e\u0442\u0432\u0435\u0442\u0430 <code><strong>response<\/strong><\/code> \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u0435\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439.<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u041a\u0440\u0430\u0442\u043a\u043e \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f:<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u0412\u044b \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u043f\u0440\u0430\u0432\u044b \u2014 \u0440\u0430\u0437\u043d\u044b\u0435 <strong>endpoints<\/strong> API \u0412\u0441\u0435\u043c\u0438\u0440\u043d\u043e\u0433\u043e \u0431\u0430\u043d\u043a\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0440\u0430\u0437\u043d\u044b\u0435 \u0422\u0418\u041f\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u043f\u043e\u043b\u044f <code>per_page<\/code>. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0441\u043f\u0440\u0430\u0432\u0438\u043c\u0441\u044f \u0441 \u044d\u0442\u0438\u043c, \u0441\u043e\u0437\u0434\u0430\u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u043e\u0442\u0432\u0435\u0442\u0430 response.&nbsp;<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u0412\u043e\u0442 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f:<\/span><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Roboto-Mono.ttf\" style=\"font-size:.75rem;font-family:Code-Pro-Roboto-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#abb2bf;--cbp-line-number-width:calc(2 * 0.6 * .75rem);line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282c34\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"\/\/ Separate metadata structures for different endpoints\nstruct CountryResponseMetadata: Decodable {\n    let page: Int\n    let pages: Int\n    let perPage: String  \/\/ String in country endpoint\n    let total: Int\n    \n    enum CodingKeys: String, CodingKey {\n        case page, pages, total\n        case perPage = &quot;per_page&quot;\n    }\n}\n\nstruct IndicatorResponseMetadata: Decodable {\n    let page: Int\n    let pages: Int\n    let perPage: Int  \/\/ Int in indicator endpoints\n    let total: Int\n    \n    enum CodingKeys: String, CodingKey {\n        case page, pages, total\n        case perPage = &quot;per_page&quot;\n    }\n}\n\nclass CountryViewModel: ObservableObject {\n    \/\/ ... rest of the class remains the same ...\n\n    private func fetchCountries() async throws -&gt; [Country] {\n        struct WorldBankResponse: Decodable {\n            let countries: [Country]\n            \n            init(from decoder: Decoder) throws {\n                var container = try decoder.unkeyedContainer()\n                _ = try container.decode(CountryResponseMetadata.self)  \/\/ Use correct metadata\n                countries = try container.decode([Country].self)\n            }\n        }\n        \n        let (data, _) = try await URLSession.shared.data(from: URL(string: countryURL)!)\n        return try JSONDecoder().decode(WorldBankResponse.self, from: data).countries\n    }\n\n    private func fetchIndicatorData(url: String) async throws -&gt; [String: Double] {\n        struct IndicatorResponse: Decodable {\n            let entries: [Entry]\n            \n            init(from decoder: Decoder) throws {\n                var container = try decoder.unkeyedContainer()\n                _ = try container.decode(IndicatorResponseMetadata.self)  \/\/ Use correct metadata\n                entries = try container.decode([Entry].self)\n            }\n            \n            struct Entry: Decodable {\n                let country: Country\n                let value: Double?\n                \n                struct Country: Decodable {\n                    let id: String\n                }\n            }\n        }\n        \n        let (data, _) = try await URLSession.shared.data(from: \n                                                        URL(string: url)!)\n        let response = try JSONDecoder().decode(IndicatorResponse.self, \n                                                        from: data)\n        \n        return response.entries.reduce(into: [:]) { dict, entry in\n            guard let value = entry.value else { return }\n            dict[entry.country.id] = value\n        }\n    }\n}\" style=\"color:#abb2bf;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki one-dark-pro\" style=\"background-color: #282c34\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #7F848E; font-style: italic\">\/\/ Separate metadata structures for different endpoints<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C678DD\">struct<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">CountryResponseMetadata<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">Decodable <\/span><span style=\"color: #ABB2BF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> page: <\/span><span style=\"color: #E5C07B\">Int<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> pages: <\/span><span style=\"color: #E5C07B\">Int<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> perPage: <\/span><span style=\"color: #E5C07B\">String<\/span><span style=\"color: #ABB2BF\">  <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ String in country endpoint<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> total: <\/span><span style=\"color: #E5C07B\">Int<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">enum<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">CodingKeys<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">String<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #E5C07B\">CodingKey <\/span><span style=\"color: #ABB2BF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E06C75\">page<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #E06C75\">pages<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #E06C75\">total<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E06C75\">perPage<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #56B6C2\">=<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #98C379\">&quot;per_page&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #C678DD\">struct<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">IndicatorResponseMetadata<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">Decodable <\/span><span style=\"color: #ABB2BF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> page: <\/span><span style=\"color: #E5C07B\">Int<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> pages: <\/span><span style=\"color: #E5C07B\">Int<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> perPage: <\/span><span style=\"color: #E5C07B\">Int<\/span><span style=\"color: #ABB2BF\">  <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ Int in indicator endpoints<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> total: <\/span><span style=\"color: #E5C07B\">Int<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">enum<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">CodingKeys<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">String<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #E5C07B\">CodingKey <\/span><span style=\"color: #ABB2BF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E06C75\">page<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #E06C75\">pages<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #E06C75\">total<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E06C75\">perPage<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #56B6C2\">=<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #98C379\">&quot;per_page&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #C678DD\">class<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">CountryViewModel<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">ObservableObject <\/span><span style=\"color: #ABB2BF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ ... rest of the class remains the same ...<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">private<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">func<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">fetchCountries<\/span><span style=\"color: #ABB2BF\">() <\/span><span style=\"color: #C678DD\">async<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">throws<\/span><span style=\"color: #ABB2BF\"> -&gt; [Country] {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">struct<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">WorldBankResponse<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">Decodable <\/span><span style=\"color: #ABB2BF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> countries: [Country]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">init<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">from<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #ABB2BF; font-style: italic\">decoder<\/span><span style=\"color: #ABB2BF\">: Decoder) <\/span><span style=\"color: #C678DD\">throws<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #C678DD\">var<\/span><span style=\"color: #ABB2BF\"> container = <\/span><span style=\"color: #C678DD\">try<\/span><span style=\"color: #ABB2BF\"> decoder.<\/span><span style=\"color: #61AFEF\">unkeyedContainer<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                _ = <\/span><span style=\"color: #C678DD\">try<\/span><span style=\"color: #ABB2BF\"> container.<\/span><span style=\"color: #56B6C2\">decode<\/span><span style=\"color: #ABB2BF\">(CountryResponseMetadata.<\/span><span style=\"color: #C678DD\">self<\/span><span style=\"color: #ABB2BF\">)  <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ Use correct metadata<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                countries = <\/span><span style=\"color: #C678DD\">try<\/span><span style=\"color: #ABB2BF\"> container.<\/span><span style=\"color: #56B6C2\">decode<\/span><span style=\"color: #ABB2BF\">([Country].<\/span><span style=\"color: #C678DD\">self<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> (data, _) = <\/span><span style=\"color: #C678DD\">try<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">await<\/span><span style=\"color: #ABB2BF\"> URLSession.<\/span><span style=\"color: #E06C75\">shared<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #61AFEF\">data<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">from<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">URL<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">string<\/span><span style=\"color: #ABB2BF\">: countryURL)!)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">try<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">JSONDecoder<\/span><span style=\"color: #ABB2BF\">().<\/span><span style=\"color: #56B6C2\">decode<\/span><span style=\"color: #ABB2BF\">(WorldBankResponse.<\/span><span style=\"color: #C678DD\">self<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">from<\/span><span style=\"color: #ABB2BF\">: data).<\/span><span style=\"color: #E06C75\">countries<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">private<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">func<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">fetchIndicatorData<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF; font-style: italic\">url<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">String<\/span><span style=\"color: #ABB2BF\">) <\/span><span style=\"color: #C678DD\">async<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">throws<\/span><span style=\"color: #ABB2BF\"> -&gt; [<\/span><span style=\"color: #E5C07B\">String<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">Double<\/span><span style=\"color: #ABB2BF\">] {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">struct<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">IndicatorResponse<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">Decodable <\/span><span style=\"color: #ABB2BF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> entries: [Entry]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">init<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">from<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #ABB2BF; font-style: italic\">decoder<\/span><span style=\"color: #ABB2BF\">: Decoder) <\/span><span style=\"color: #C678DD\">throws<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #C678DD\">var<\/span><span style=\"color: #ABB2BF\"> container = <\/span><span style=\"color: #C678DD\">try<\/span><span style=\"color: #ABB2BF\"> decoder.<\/span><span style=\"color: #61AFEF\">unkeyedContainer<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                _ = <\/span><span style=\"color: #C678DD\">try<\/span><span style=\"color: #ABB2BF\"> container.<\/span><span style=\"color: #56B6C2\">decode<\/span><span style=\"color: #ABB2BF\">(IndicatorResponseMetadata.<\/span><span style=\"color: #C678DD\">self<\/span><span style=\"color: #ABB2BF\">)  <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ Use correct metadata<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                entries = <\/span><span style=\"color: #C678DD\">try<\/span><span style=\"color: #ABB2BF\"> container.<\/span><span style=\"color: #56B6C2\">decode<\/span><span style=\"color: #ABB2BF\">([Entry].<\/span><span style=\"color: #C678DD\">self<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">struct<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">Entry<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">Decodable <\/span><span style=\"color: #ABB2BF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> country: Country<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> value: <\/span><span style=\"color: #E5C07B\">Double<\/span><span style=\"color: #ABB2BF\">?<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #C678DD\">struct<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">Country<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">Decodable <\/span><span style=\"color: #ABB2BF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                    <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> id: <\/span><span style=\"color: #E5C07B\">String<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> (data, _) = <\/span><span style=\"color: #C678DD\">try<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">await<\/span><span style=\"color: #ABB2BF\"> URLSession.<\/span><span style=\"color: #E06C75\">shared<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #61AFEF\">data<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">from<\/span><span style=\"color: #ABB2BF\">: <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                                                        <\/span><span style=\"color: #61AFEF\">URL<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">string<\/span><span style=\"color: #ABB2BF\">: url)!)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> response = <\/span><span style=\"color: #C678DD\">try<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">JSONDecoder<\/span><span style=\"color: #ABB2BF\">().<\/span><span style=\"color: #56B6C2\">decode<\/span><span style=\"color: #ABB2BF\">(IndicatorResponse.<\/span><span style=\"color: #C678DD\">self<\/span><span style=\"color: #ABB2BF\">, <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                                                        <\/span><span style=\"color: #61AFEF\">from<\/span><span style=\"color: #ABB2BF\">: data)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> response.<\/span><span style=\"color: #E06C75\">entries<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #56B6C2\">reduce<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">into<\/span><span style=\"color: #ABB2BF\">: [<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\">]) { dict, entry <\/span><span style=\"color: #C678DD\">in<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">guard<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> value = entry.value <\/span><span style=\"color: #C678DD\">else<\/span><span style=\"color: #ABB2BF\"> { <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            dict[entry.<\/span><span style=\"color: #E06C75\">country<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #E06C75\">id<\/span><span style=\"color: #ABB2BF\">] = value<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u041a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f:<\/span><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><span style=\"font-weight: 400;\">\u0421\u043e\u0437\u0434\u0430\u043d\u044b \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0442\u0438\u043f\u044b <code>CountryResponseMetadata<\/code> \u0438 <code>IndicatorResponseMetadata<\/code><\/span><\/li>\n\n\n\n<li><span style=\"font-weight: 400;\"><code><mark style=\"background-color:#f9f62c\" class=\"has-inline-color\">CountryResponseMetadata<\/mark><\/code> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 <code><mark style=\"background-color:#fbf228\" class=\"has-inline-color\">String<\/mark><\/code> \u0434\u043b\u044f <code>perPage<\/code><\/span><\/li>\n\n\n\n<li><span style=\"font-weight: 400;\"><code><mark style=\"background-color:#f7fc0d\" class=\"has-inline-color\">IndicatorResponseMetadata<\/mark><\/code> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 <code><mark style=\"background-color:#fff520\" class=\"has-inline-color\">Int<\/mark><\/code> \u0434\u043b\u044f <code>perPage<\/code><\/span><\/li>\n\n\n\n<li><span style=\"font-weight: 400;\">\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u043e \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 fetchCountries \u0438 fetchIndicatorData \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0422\u0418\u041f\u043e\u0432 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445<\/span><\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u042d\u0442\u043e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 API \u0412\u0441\u0435\u043c\u0438\u0440\u043d\u043e\u0433\u043e \u0431\u0430\u043d\u043a\u0430:<\/span><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><span style=\"font-weight: 400;\"><strong>Country endpoint response:<\/strong><\/span><\/li>\n<\/ul>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Roboto-Mono.ttf\" style=\"font-size:.75rem;font-family:Code-Pro-Roboto-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#abb2bf;--cbp-line-number-width:calc(1 * 0.6 * .75rem);--cbp-line-highlight-color:rgba(134, 167, 228, 0.2);line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282c34\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"{\n  &quot;page&quot;: 1,\n  &quot;pages&quot;: 6,\n  &quot;per_page&quot;: &quot;50&quot;,\n  &quot;total&quot;: 299\n}\" style=\"color:#abb2bf;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki one-dark-pro\" style=\"background-color: #282c34\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #ABB2BF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">  <\/span><span style=\"color: #98C379\">&quot;page&quot;<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">  <\/span><span style=\"color: #98C379\">&quot;pages&quot;<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #D19A66\">6<\/span><span style=\"color: #ABB2BF\">,<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #ABB2BF\">  <\/span><span style=\"color: #98C379\">&quot;per_page&quot;<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #98C379\">&quot;50&quot;<\/span><span style=\"color: #ABB2BF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">  <\/span><span style=\"color: #98C379\">&quot;total&quot;<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #D19A66\">299<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Indicator endpoint response:<\/strong><\/li>\n<\/ul>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Roboto-Mono.ttf\" style=\"font-size:.75rem;font-family:Code-Pro-Roboto-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#abb2bf;--cbp-line-number-width:calc(1 * 0.6 * .75rem);--cbp-line-highlight-color:rgba(134, 167, 228, 0.2);line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282c34\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"{\n  &quot;page&quot;: 1,\n  &quot;pages&quot;: 10,\n  &quot;per_page&quot;: 50,\n  &quot;total&quot;: 500\n}\" style=\"color:#abb2bf;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki one-dark-pro\" style=\"background-color: #282c34\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #ABB2BF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">  <\/span><span style=\"color: #98C379\">&quot;page&quot;<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">  <\/span><span style=\"color: #98C379\">&quot;pages&quot;<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #D19A66\">10<\/span><span style=\"color: #ABB2BF\">,<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #ABB2BF\">  <\/span><span style=\"color: #98C379\">&quot;per_page&quot;<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #D19A66\">50<\/span><span style=\"color: #ABB2BF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">  <\/span><span style=\"color: #98C379\">&quot;total&quot;<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #D19A66\">500<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u041e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0439 \u043a\u043e\u0434 \u043c\u043e\u0436\u0435\u0442 \u043e\u0441\u0442\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0435\u0438\u0437\u043c\u0435\u043d\u043d\u044b\u043c. \u042d\u0442\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442:<\/span><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><span style=\"font-weight: 400;\">\u0420\u0430\u0437\u043d\u044b\u0435 \u0422\u0418\u041f\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u0433\u043e \u0438 \u0442\u043e\u0433\u043e \u0436\u0435 \u043f\u043e\u043b\u044f \u043d\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 <strong>endpoints<\/strong><\/span><\/li>\n\n\n\n<li><span style=\"font-weight: 400;\">\u0412\u043b\u043e\u0436\u0435\u043d\u043d\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443<code> country.id<\/code> \u0432 \u043e\u0442\u0432\u0435\u0442\u0430\u0445 <code>response<\/code> \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0430 <code>indicator<\/code><\/span><\/li>\n\n\n\n<li><span style=\"font-weight: 400;\">\u0411\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0435 \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 JSON \u0441\u043e Swift \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u043e\u043c <code>Codable<\/code>&nbsp;<\/span><\/li>\n\n\n\n<li><span style=\"font-weight: 400;\">\u041f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0443\u044e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u043e\u0448\u0438\u0431\u043e\u043a \u043f\u0440\u0438 \u043d\u0435\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u044f\u0445 \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/span><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u042d\u0442\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u0443\u0441\u0442\u0440\u0430\u043d\u0438\u0442\u044c \u043b\u044e\u0431\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0441 \u043d\u0435\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u044f\u043c\u0438 \u0422\u0418\u041f\u043e\u0432 \u0432 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044f \u0432\u0441\u044e \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0441 \u043d\u0430\u0441\u0435\u043b\u0435\u043d\u0438\u0435\u043c, \u0412\u0412\u041f, \u0441\u0442\u043e\u043b\u0438\u0446\u0430\u043c\u0438 \u0438 \u044d\u043c\u043e\u0434\u0437\u0438 \u0444\u043b\u0430\u0433\u043e\u0432.<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 &#8212; \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:<\/span><\/p>\n\n\n\n<figure class=\"wp-block-image is-resized\"><img decoding=\"async\" src=\"https:\/\/lh7-rt.googleusercontent.com\/docsz\/AD_4nXf03ICfrkUQM4-pPOquzBJWt3cS_0pVlftja53_zKSR3fy4lKihJkbJ1_D_gzBAVqUjOZlWYVLs3uGs9c1i3mAEveMoeq7mDxOp3zcTkfYLYRbOcuDiglshYlvjaLyKKtLf5TgE?key=jZ3H_Ic4-xgqXIV3TW-rCUlR\" alt=\"\" style=\"width:312px;height:auto\"\/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>\u0420\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 Model \u0438 ViewModel<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u043f\u0440\u043e\u0441\u0438\u043c \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c <code>Model<\/code> \u0438\u0437 \u0444\u0430\u0439\u043b\u0430 <code>CountryViewModel<\/code>:<\/span><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-rt.googleusercontent.com\/docsz\/AD_4nXdPBzU_eStGKCINZFyZSkf8lGNS-efvrS_em5_Yo4SO99dvjVvKmmPXKKNqhAj1RMoZVKma8hXLXL_0nFypPqQjb2rwlEO9HuJC4gGL4v7LCotEPp-lWiKiWvvyRYEOsanhboLutQ?key=jZ3H_Ic4-xgqXIV3TW-rCUlR\" alt=\"\"\/><\/figure>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td class=\"has-text-align-right\" data-align=\"right\"><span style=\"font-weight: 400;\">\u0420\u0430\u0437\u0434\u0435\u043b\u0438 <code>Model<\/code> \u0438 <code>View Model<\/code> \u0432 \u043d\u0430\u0448\u0435\u043c \u043a\u043e\u0434\u0435 <code>CountryViewModel<\/code><\/span><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0440\u0430\u0441\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u044f, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0437\u0430\u0442\u0440\u0430\u0447\u0435\u043d\u043e  64 \u0441\u0435\u043a\u0443\u043d\u0434 (\u0447\u0443\u0442\u044c \u0431\u043e\u043b\u0435\u0435 1 \u043c\u0438\u043d\u0443\u0442\u044b):<\/span><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-rt.googleusercontent.com\/docsz\/AD_4nXfW6mmjYtUKgzLZ1Yt9F1SbNBTWf5MubfY5px4u7bIFfFuYFsEK1xKdZaOuqz-6tFe-Bv0UBM9gdCMjtFPMb5Vubmd0egczsisebm9RMKAd96f9zdOOdFoI8t-aRJY8BcGbYfXlpw?key=jZ3H_Ic4-xgqXIV3TW-rCUlR\" alt=\"\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u0412\u043e\u0442 \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u044d\u0442\u0438\u0445 \u0440\u0430\u0441\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u0439:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\u0425\u043e\u0440\u043e\u0448\u043e, \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0445\u043e\u0447\u0435\u0442, \u0447\u0442\u043e\u0431\u044b \u044f \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u043b <code>Model<\/code> \u0438 <code>View Model<\/code> \u0432 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u043c \u043a\u043e\u0434\u0435 <code>SwiftUI<\/code>. \u041d\u0430\u0447\u043d\u0443 \u0441 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043d\u0430\u043f\u043e\u043c\u043d\u044e \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443. \u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c \u043a\u043e\u0434\u0435 \u0431\u044b\u043b\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 <code>struct Country<\/code> \u0438 \u043a\u043b\u0430\u0441\u0441 <code>class CountryViewModel<\/code>, \u043d\u043e \u0432\u0441\u0435 \u043e\u043d\u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u043b\u0438\u0441\u044c \u0432 \u043e\u0434\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435. \u0427\u0442\u043e\u0431\u044b \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u043e\u0432\u043e\u0439 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435, \u043c\u043d\u0435 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0440\u0430\u0437\u0431\u0438\u0442\u044c \u0438\u0445 \u043d\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u0438\u043b\u0438, \u043f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435, \u043d\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u044b \u0432 \u043a\u043e\u0434\u0435.<br><br>\u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u043c\u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0432\u0441\u0435 \u041c\u043e\u0434\u0435\u043b\u0438 \u0434\u0430\u043d\u043d\u044b\u0445. \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 <code>struct Country <\/code>\u0443\u0436\u0435 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442, \u043d\u043e \u0435\u0441\u0442\u044c \u0442\u0430\u043a\u0436\u0435 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a <code>struct Region<\/code> \u0438 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u043e\u0442\u0432\u0435\u0442\u043e\u0432 <code>API response<\/code>. \u0418\u0445 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u0433\u0440\u0443\u043f\u043f\u0443 \u041c\u043e\u0434\u0435\u043b\u0435\u0439. <code>View Model<\/code> <code>CountryViewModel<\/code>, \u0434\u043e\u043b\u0436\u043d\u0430 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0431\u0438\u0437\u043d\u0435\u0441-\u043b\u043e\u0433\u0438\u043a\u0443, \u0432\u044b\u0431\u043e\u0440\u043a\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u043c.<br><br>\u0420\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 <code>struct Country<\/code>, \u0443 \u043d\u0435\u0435 \u0435\u0441\u0442\u044c \u0442\u0430\u043a\u0438\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430, \u043a\u0430\u043a <code>id<\/code>, <code>iso2Code<\/code>, <code>name<\/code>, <code>capitalCity<\/code>, <code>region<\/code>, <code>population<\/code> \u0438 <code>gdp<\/code>. \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 <code>struct Region<\/code> \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0447\u0430\u0441\u0442\u044c\u044e <code>struct Country<\/code>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0435\u0435 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432 \u041c\u043e\u0434\u0435\u043b\u0438 <code>Country<\/code>, \u0435\u0441\u043b\u0438 \u043e\u043d\u0430 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0433\u0434\u0435-\u0442\u043e \u0435\u0449\u0435. \u0422\u0430\u043a\u0438\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u0430\u043a <code>CountryResponseMetadata<\/code> \u0438 <code>IndicatorResponseMetadata<\/code>, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043f\u0440\u0438 \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u043e\u0442\u0432\u0435\u0442\u043e\u0432 <code>API<\/code>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u043d\u0438 \u0442\u0430\u043a\u0436\u0435 \u043e\u0442\u043d\u043e\u0441\u044f\u0442\u0441\u044f \u043a \u0440\u0430\u0437\u0434\u0435\u043b\u0443 \u041c\u043e\u0434\u0435\u043b\u0438.<br><br>\u0414\u0430\u043b\u0435\u0435, <code>View Model CountryViewModel<\/code> \u0432 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u0438\u043c\u0435\u0435\u0442 <code>@Published<\/code> \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 <code>loadState<\/code> \u0438 <code>groupedCountries<\/code>. \u041e\u043d\u0430 \u0442\u0430\u043a\u0436\u0435 \u0438\u043c\u0435\u0435\u0442 <code>fetch<\/code> \u043c\u0435\u0442\u043e\u0434\u044b \u0434\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445. \u041c\u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e <code>View Model<\/code> \u043d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0439 \u041c\u043e\u0434\u0435\u043b\u0435\u0439. \u0420\u043e\u043b\u044c <code>View Model<\/code> \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u043c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u043d\u0430 \u0434\u043e\u043b\u0436\u0435\u043d <strong>\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c<\/strong> \u041c\u043e\u0434\u0435\u043b\u0438, \u043d\u043e \u041d\u0415 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u0438\u0445.<br><br>\u041c\u043d\u0435 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u0433\u0440\u0443\u043f\u043f\u0443 \u0434\u043b\u044f <code>Models<\/code>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 <code>Country<\/code>, <code>Region<\/code> \u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445. \u0417\u0430\u0442\u0435\u043c <code>View Model<\/code> \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u0442 \u043c\u043e\u0434\u0435\u043b\u0438 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0438\u0445. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, <code>IndicatorResponse<\/code> \u0438 \u0435\u0433\u043e \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b <code>Entry<\/code> \u0438 <code>Country<\/code> \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0447\u0430\u0441\u0442\u044c\u044e \u043b\u043e\u0433\u0438\u043a\u0438 \u0432\u044b\u0431\u043e\u0440\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438\u0445 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f View Model, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043a\u0430\u043a <code>private<\/code> \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b <code>struct<\/code> \u0432\u043d\u0443\u0442\u0440\u0438 \u043c\u0435\u0442\u043e\u0434\u043e\u0432, \u0433\u0434\u0435 \u043e\u043d\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f.<br><br>\u041f\u043e\u0434\u043e\u0436\u0434\u0438\u0442\u0435, <code>IndicatorResponse<\/code> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u043c\u0435\u0442\u043e\u0434\u0435 <code>fetchIndicatorData<\/code>. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u044d\u0442\u043e \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a <code>View Model <\/code>\u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043b\u0443\u0447\u0448\u0435 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u044d\u0442\u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u043e\u0442\u0432\u0435\u0442\u043e\u0432 <code>response<\/code> \u0432\u043d\u0443\u0442\u0440\u0438 <code>View Model<\/code> \u043a\u0430\u043a <code>private<\/code> \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u041c\u043e\u0434\u0435\u043b\u0438 \u043e\u0441\u0442\u0430\u044e\u0442\u0441\u044f \u0447\u0438\u0441\u0442\u044b\u043c\u0438 \u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0430 \u043d\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b <code>API<\/code> \u043e\u0442\u0432\u0435\u0442\u043e\u0432 <code>response<\/code>.<br><br>\u0415\u0449\u0435 \u043e\u0434\u043d\u043e \u0441\u043e\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u2014 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 <code>enum LoadingState<\/code>. \u042d\u0442\u043e \u0447\u0430\u0441\u0442\u044c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u043c <code>View Model<\/code>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u043d\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u043e\u0441\u0442\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0438 <code>View Model<\/code>. \u041c\u043e\u0434\u0435\u043b\u0438 \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0438\u043c\u0435\u0442\u044c \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439 <code>enum<\/code>, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0441 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u043c <code>View Model<\/code>.<br><br>\u041c\u043d\u0435 \u0442\u0430\u043a\u0436\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u043d\u0435\u0442 \u043b\u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u0434\u0430\u043d\u043d\u044b\u0445. <code>ResponseMetadata<\/code> \u0440\u0430\u043d\u0435\u0435 \u0431\u044b\u043b\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439, \u043d\u043e \u043f\u043e\u0441\u043b\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043e\u043d\u0430 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0430 \u043d\u0430 <code>CountryResponseMetadata<\/code> \u0438 <code>IndicatorResponseMetadata<\/code>. \u041e\u043d\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0447\u0430\u0441\u0442\u044c\u044e \u041c\u043e\u0434\u0435\u043b\u0435\u0439, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043e\u043d\u0438 \u0441\u0432\u044f\u0437\u0430\u043d\u044b \u0441\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439 <code>API<\/code> \u043e\u0442\u0432\u0435\u0442\u0430 <code>response<\/code>.<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">\u041f\u043e\u0434\u043e\u0436\u0434\u0438\u0442\u0435, \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u044d\u0442\u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432 <code>View Mode<\/code>l. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043e\u043d\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c private \u0432 \u043c\u0435\u0442\u043e\u0434\u0430\u0445 <code>View Model<\/code>, \u0433\u0434\u0435 \u043e\u043d\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f. \u041f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0447\u0430\u0441\u0442\u044c\u044e \u041c\u043e\u0434\u0435\u043b\u0438, \u043d\u043e \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0433\u0434\u0435-\u043b\u0438\u0431\u043e \u0435\u0449\u0435, \u043b\u0443\u0447\u0448\u0435 \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0438\u0445 \u0432\u043d\u0443\u0442\u0440\u0438 <code>View Model<\/code>, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0440\u0430\u0441\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u043d\u0435\u043d\u0443\u0436\u043d\u044b\u0435 \u0442\u0438\u043f\u044b.<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">\u0418\u0442\u0430\u043a, \u043f\u043b\u0430\u043d \u0442\u0430\u043a\u043e\u0439:<br><br>1. \u0421\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u0433\u0440\u0443\u043f\u043f\u0443 <code>Models<\/code>, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0443\u044e <code>Country<\/code>, <code>Region<\/code> \u0438 \u043b\u044e\u0431\u044b\u0435 \u0434\u0440\u0443\u0433\u0438\u0435 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0445.<br><br>2. \u041f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0442\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 (<code>CountryResponseMetadata<\/code>, <code>IndicatorResponseMetadata<\/code>) \u0432\u043e<code> View Model<\/code> \u043a\u0430\u043a <code>private<\/code>&nbsp; \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043e\u043d\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.<br><br>3. \u0423\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044c, \u0447\u0442\u043e \u043c\u0435\u0442\u043e\u0434\u044b <code>View Model <\/code>\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u044d\u0442\u0438 \u041c\u043e\u0434\u0435\u043b\u0438 \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0442 \u0432\u044b\u0431\u043e\u0440\u043a\u043e\u0439 \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u043e\u0439 \u0434\u0430\u043d\u043d\u044b\u0445.<br><br>4. \u0412\u044b\u0434\u0435\u043b\u0438\u0442\u0435 <code>View Model<\/code> \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u0438\u043b\u0438 \u0440\u0430\u0437\u0434\u0435\u043b, \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0432 \u0435\u0433\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043e\u0442 \u041c\u043e\u0434\u0435\u043b\u0435\u0439.<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">\u0415\u0441\u043b\u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434, \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 <code>Country<\/code> \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0430 \u0432 \u0442\u043e\u043c \u0436\u0435 \u0444\u0430\u0439\u043b\u0435, \u0447\u0442\u043e \u0438 <code>View Model<\/code>. \u0427\u0442\u043e\u0431\u044b \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u0438\u0445, \u044f \u043c\u043e\u0433\u0443 \u0440\u0435\u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0434 \u0432 \u0434\u0432\u0430 \u0440\u0430\u0437\u0434\u0435\u043b\u0430: \u043e\u0434\u0438\u043d \u0434\u043b\u044f \u041c\u043e\u0434\u0435\u043b\u0435\u0439 \u0438 \u043e\u0434\u0438\u043d \u0434\u043b\u044f <code>View Model<\/code>. \u0412 <code>Swift<\/code> \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439 \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0438\u0432 \u043a\u043e\u0434. \u041e\u0434\u043d\u0430\u043a\u043e \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u0430\u0445.<br><br>\u0415\u0449\u0435 \u043e\u0434\u0438\u043d \u043c\u043e\u043c\u0435\u043d\u0442, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u2014 \u044d\u0442\u043e <code>struct IndicatorResponse<\/code> \u0438 \u0435\u0433\u043e \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043e\u043d\u0438 \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u044b \u0434\u043b\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0430 \u0432 <code>View Model<\/code>, \u043e\u043d\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u043e\u0441\u0442\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u0432 <code>View Model<\/code> \u043a\u0430\u043a <code>private<\/code> \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u041c\u043e\u0434\u0435\u043b\u044f\u043c \u0441\u043e\u0441\u0440\u0435\u0434\u043e\u0442\u043e\u0447\u0438\u0442\u044c\u0441\u044f \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0430 \u043d\u0435 \u043d\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u0445 <code>API<\/code> \u043e\u0442\u0432\u0435\u0442\u043e\u0432 <code>response<\/code>.<br><br>\u041c\u043d\u0435 \u0442\u0430\u043a\u0436\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c <code>CodingKeys<\/code> \u0434\u043b\u044f \u041c\u043e\u0434\u0435\u043b\u0438 <code>Country<\/code>. \u0420\u0430\u043d\u0435\u0435 \u0432 \u043d\u0435\u0439 \u0431\u044b\u043b\u0438 <code>CodingKeys<\/code> \u0434\u043b\u044f <code>iso2Code<\/code> \u0438 <code>capitalCity<\/code>. \u042d\u0442\u043e \u0432\u0435\u0440\u043d\u043e, \u0442\u0430\u043a \u043a\u0430\u043a <code>API<\/code> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0440\u0430\u0437\u043d\u044b\u0435 \u0438\u043c\u0435\u043d\u0430 \u043a\u043b\u044e\u0447\u0435\u0439. \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0443 <code>Codable<\/code> \u0434\u043e\u043b\u0436\u043d\u043e \u043e\u0441\u0442\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u041c\u043e\u0434\u0435\u043b\u0438.<br><br>\u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u044d\u043c\u043e\u0434\u0437\u0438 \u0444\u043b\u0430\u0433\u0430 \u2014 \u044d\u0442\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c\u043e\u0435 <code>flag<\/code> \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u0432 \u041c\u043e\u0434\u0435\u043b\u0438 <code>Country<\/code>. \u042d\u0442\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043e \u0438\u0437 <code>iso2Code<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0447\u0430\u0441\u0442\u044c\u044e \u043c\u043e\u0434\u0435\u043b\u0438. \u042d\u0442\u043e \u043b\u043e\u0433\u0438\u043a\u0430 <code>View<\/code>, \u043d\u043e \u043e\u043d\u0430 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u0430, \u0447\u0442\u043e\u0431\u044b \u043e\u0441\u0442\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u041c\u043e\u0434\u0435\u043b\u0438.<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">\u0422\u0435\u043f\u0435\u0440\u044c \u0441\u043e\u0431\u0435\u0440\u0435\u043c \u0432\u0441\u0435 \u0432\u043c\u0435\u0441\u0442\u0435:<br><br>1. \u0413\u0440\u0443\u043f\u043f\u0430 <code>Models<\/code> \u0431\u0443\u0434\u0435\u0442 \u0438\u043c\u0435\u0442\u044c:<br><br>   - <code>Country <\/code>\u0441 <code>Region<\/code> \u0438 <code>CodingKeys<\/code>.<br>   - \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445, \u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0433\u0434\u0435-\u0442\u043e \u0435\u0449\u0435, \u043d\u043e, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u043e\u043d\u0438 \u043e\u0441\u0442\u0430\u044e\u0442\u0441\u044f \u0432 <code>View Model<\/code>.<br><br>2. \u0413\u0440\u0443\u043f\u043f\u0430 <code>View Model<\/code> \u0431\u0443\u0434\u0435\u0442 \u0438\u043c\u0435\u0442\u044c:<br><br>   - <code>CountryViewModel<\/code> \u0441 <code>loadingState<\/code>, c <code>@Published<\/code> \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438 \u0438 \u043c\u0435\u0442\u043e\u0434\u0430\u043c\u0438.<br>   - \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u043a\u0430\u043a private \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0432\u043d\u0443\u0442\u0440\u0438 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 <code>View Model<\/code>, \u0433\u0434\u0435 \u043e\u043d\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f.<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">\u041f\u043e\u0434\u043e\u0436\u0434\u0438\u0442\u0435, \u0432 <code>Swift<\/code> \u0443 \u0432\u0430\u0441 \u043d\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0432\u043d\u0443\u0442\u0440\u0438 \u043c\u0435\u0442\u043e\u0434\u043e\u0432, \u043d\u043e \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u043c\u0435\u0442\u044c \u0438\u0445 \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043b\u0430\u0441\u0441\u0430 <code>class View Model<\/code> \u043a\u0430\u043a <code>private<\/code>&nbsp; \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, <code>CountryResponseMetadata<\/code> \u0438 <code>IndicatorResponseMetadata<\/code> \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c <code>private<\/code> \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u043c\u0438 \u0432\u043d\u0443\u0442\u0440\u0438 <code>View<\/code> <code>Model<\/code>, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043e\u043d\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0430\u043c.<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\"><mark style=\"background-color:#f7fb44\" class=\"has-inline-color\">\u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e, <code>IndicatorResponse<\/code> \u0438 \u0435\u0433\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b <code>struct Entry<\/code> \u0438 <code>struct Country<\/code> \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c <code>private <\/code>\u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043c\u0435\u0442\u043e\u0434\u0430 <code>fetchIndicatorData <\/code>\u0432\u043e <code>View Model<\/code>. \u041d\u043e \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 <code>Swift<\/code> \u043d\u0435 \u0434\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0432\u043d\u0443\u0442\u0440\u0438 \u043c\u0435\u0442\u043e\u0434\u043e\u0432, \u0438\u0445 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u043b\u043e\u0436\u0438\u0442\u044c \u0432 \u043a\u043b\u0430\u0441\u0441 <code>View Model<\/code> \u043a\u0430\u043a <code>private<\/code> \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b.<\/mark><\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong>\u042d\u0442\u043e \u0441\u043f\u043e\u0440\u043d\u043e\u0435 \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435.<\/strong><br><br>1.<strong> \u041c\u043e\u0434\u0435\u043b\u0438<\/strong>:<br><br>- <code>Country<\/code>:&nbsp; <code>id, iso2Code, \u0438\u043c\u044f, capitalCity, region, population, gdp<\/code><br>- \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 <code>Region<\/code><br>- \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 <code>enum CodingKeys<\/code><br>- \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c\u043e\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e <code>flag<\/code><br><br>2.<strong> View Model<\/strong>:<br><br>- <code>CountryViewModel<\/code><br>- \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 <code>enum LoadingState<\/code><br>- <code>@Published <\/code>\u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430<br>- <code>URL-\u0430\u0434\u0440\u0435\u0441\u0430 API<\/code><br>- \u041c\u0435\u0442\u043e\u0434\u044b \u0432\u044b\u0431\u043e\u0440\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445<br>- <code>private<\/code> \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0434\u043b\u044f \u043e\u0442\u0432\u0435\u0442\u043e\u0432 <code>API<\/code> (<code>CountryResponseMetadata<\/code>, <code>IndicatorResponseMetadata<\/code>, <code>IndicatorResponse<\/code> \u0438 \u0442. \u0434.)<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">\u042d\u0442\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u041c\u043e\u0434\u0435\u043b\u044f\u043c \u0441\u043e\u0441\u0440\u0435\u0434\u043e\u0442\u043e\u0447\u0438\u0442\u044c\u0441\u044f \u043d\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445, \u0430 View Model \u2014 \u043d\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0431\u0438\u0437\u043d\u0435\u0441-\u043b\u043e\u0433\u0438\u043a\u0435.<br><br>\u0422\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u044d\u0442\u043e\u0433\u043e, \u043f\u0440\u0438 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0438 \u043d\u0430 \u0440\u0430\u0437\u043d\u044b\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u044b \u0438\u043b\u0438 \u0444\u0430\u0439\u043b\u044b, <code>View Model<\/code> \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u0442 <code>Foundation<\/code> \u0438 <code>SwiftUI<\/code>, \u0435\u0441\u043b\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e, \u043d\u043e \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u044d\u0442\u043e <code>ObservableObject<\/code>, \u0435\u043c\u0443 \u043d\u0443\u0436\u0435\u043d <code>SwiftUI<\/code>. \u041c\u043e\u0434\u0435\u043b\u0438 \u043d\u0443\u0436\u0434\u0430\u044e\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0432 <code>Foundation<\/code> \u0434\u043b\u044f <code>Codable<\/code>.<br><br>\u041c\u043d\u0435 \u0442\u0430\u043a\u0436\u0435 \u043d\u0443\u0436\u043d\u043e \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0432\u0441\u044f \u043b\u043e\u0433\u0438\u043a\u0430 \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432 <code>View Model <\/code>\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0435 <code>private<\/code> \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0434\u043b\u044f <code>API<\/code> \u043e\u0442\u0432\u0435\u0442\u043e\u0432, \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044f \u041c\u043e\u0434\u0435\u043b\u0438 \u0447\u0438\u0441\u0442\u044b\u043c\u0438.<br><br>\u0415\u0449\u0435 \u043e\u0434\u043d\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430: <code>CodingKeys<\/code> \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b <code>Country<\/code> \u0432\u043a\u043b\u044e\u0447\u0430\u044e\u0442 <code>iso2Code<\/code> \u0438 <code>capitalCity<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u043a\u043b\u044e\u0447\u0430\u043c <code>API<\/code>. \u042d\u0442\u043e \u0432\u0435\u0440\u043d\u043e. \u041c\u0435\u0442\u043e\u0434\u044b \u0430\u043d\u0430\u043b\u0438\u0437\u0430 <code>View Model<\/code> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u043e\u0442\u0432\u0435\u0442\u0430 <code>response<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u0443\u044e\u0442 <code>JSON<\/code> <code>API<\/code> \u0432 \u041c\u043e\u0434\u0435\u043b\u0438.<br><br>\u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u043c\u0435\u0442\u043e\u0434 <code>fetchAllData<\/code> <code>View Model <\/code>\u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 <code><strong>endpoints<\/strong><\/code> \u0438 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u0435\u0442 \u0438\u0445 \u0432 \u041c\u043e\u0434\u0435\u043b\u0438 <code>Country<\/code>, \u0447\u0442\u043e \u0432\u0435\u0440\u043d\u043e.<br><br>\u0418\u0442\u0430\u043a, \u043e\u043a\u043e\u043d\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442 \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u043a\u043e\u0434, \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u043d\u0430 <code>Models<\/code> \u0438 <code>View Model<\/code>, \u0441 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c\u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u043c\u0438 <code>struct<\/code> \u0438 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f\u043c\u0438 <code>enum<\/code> \u0432 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0437 \u043d\u0438\u0445, \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u044f, \u0447\u0442\u043e <code>View Model<\/code> \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435, \u0430 \u041c\u043e\u0434\u0435\u043b\u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0434\u0430\u043d\u043d\u044b\u0445.<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u0412\u043e\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u043d\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043a\u043e\u0434\u0430:<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>1. Models\/Country.swift<\/strong> (<span style=\"font-weight: 400;\">Data Model Layer)<\/span><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Roboto-Mono.ttf\" style=\"font-size:.75rem;font-family:Code-Pro-Roboto-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#abb2bf;--cbp-line-number-width:calc(2 * 0.6 * .75rem);line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282c34\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"import Foundation\n\nstruct Country: Decodable, Identifiable {\n    let id: String\n    let iso2Code: String\n    let name: String\n    let capitalCity: String\n    let region: Region\n    var population: Int?\n    var gdp: Double?\n    \n    var flag: String {\n        iso2Code.unicodeScalars\n            .map { 127397 + $0.value }\n            .compactMap(UnicodeScalar.init)\n            .map(String.init)\n            .joined()\n    }\n    \n    struct Region: Decodable {\n        let id: String\n        let value: String\n    }\n    \n    enum CodingKeys: String, CodingKey {\n        case id, name, region\n        case iso2Code = &quot;iso2Code&quot;\n        case capitalCity = &quot;capitalCity&quot;\n    }\n}\" style=\"color:#abb2bf;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki one-dark-pro\" style=\"background-color: #282c34\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #C678DD\">import<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">Foundation<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #C678DD\">struct<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">Country<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">Decodable<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #E5C07B\">Identifiable <\/span><span style=\"color: #ABB2BF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> id: <\/span><span style=\"color: #E5C07B\">String<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> iso2Code: <\/span><span style=\"color: #E5C07B\">String<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> name: <\/span><span style=\"color: #E5C07B\">String<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> capitalCity: <\/span><span style=\"color: #E5C07B\">String<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> region: Region<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">var<\/span><span style=\"color: #ABB2BF\"> population: <\/span><span style=\"color: #E5C07B\">Int<\/span><span style=\"color: #ABB2BF\">?<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">var<\/span><span style=\"color: #ABB2BF\"> gdp: <\/span><span style=\"color: #E5C07B\">Double<\/span><span style=\"color: #ABB2BF\">?<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">var<\/span><span style=\"color: #ABB2BF\"> flag: <\/span><span style=\"color: #E5C07B\">String<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        iso2Code.unicodeScalars<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            .<\/span><span style=\"color: #56B6C2\">map<\/span><span style=\"color: #ABB2BF\"> { <\/span><span style=\"color: #D19A66\">127397<\/span><span style=\"color: #ABB2BF\"> + <\/span><span style=\"color: #E5C07B\">$0<\/span><span style=\"color: #ABB2BF\">.value }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            .<\/span><span style=\"color: #61AFEF\">compactMap<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #E5C07B\">UnicodeScalar<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #C678DD\">init<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            .<\/span><span style=\"color: #56B6C2\">map<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #E5C07B\">String<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #C678DD\">init<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            .<\/span><span style=\"color: #56B6C2\">joined<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">struct<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">Region<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">Decodable <\/span><span style=\"color: #ABB2BF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> id: <\/span><span style=\"color: #E5C07B\">String<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> value: <\/span><span style=\"color: #E5C07B\">String<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">enum<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">CodingKeys<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">String<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #E5C07B\">CodingKey <\/span><span style=\"color: #ABB2BF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E06C75\">id<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #E06C75\">name<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #E06C75\">region<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E06C75\">iso2Code<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #56B6C2\">=<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #98C379\">&quot;iso2Code&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E06C75\">capitalCity<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #56B6C2\">=<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #98C379\">&quot;capitalCity&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>2. Models\/WorldBankResponse.swift<\/strong> <span style=\"font-weight: 400;\">(API Response Models)<\/span><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Roboto-Mono.ttf\" style=\"font-size:.75rem;font-family:Code-Pro-Roboto-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#abb2bf;--cbp-line-number-width:calc(2 * 0.6 * .75rem);line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282c34\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"import Foundation\nstruct CountryResponseMetadata: Decodable {\n    let page: Int\n    let pages: Int\n    let perPage: String\n    let total: Int\n    \n    enum CodingKeys: String, CodingKey {\n        case page, pages, total\n        case perPage = &quot;per_page&quot;\n    }\n}\n\nstruct IndicatorResponseMetadata: Decodable {\n    let page: Int\n    let pages: Int\n    let perPage: Int\n    let total: Int\n    \n    enum CodingKeys: String, CodingKey {\n        case page, pages, total\n        case perPage = &quot;per_page&quot;\n    }\n}\" style=\"color:#abb2bf;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki one-dark-pro\" style=\"background-color: #282c34\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #C678DD\">import<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">Foundation<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C678DD\">struct<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">CountryResponseMetadata<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">Decodable <\/span><span style=\"color: #ABB2BF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> page: <\/span><span style=\"color: #E5C07B\">Int<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> pages: <\/span><span style=\"color: #E5C07B\">Int<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> perPage: <\/span><span style=\"color: #E5C07B\">String<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> total: <\/span><span style=\"color: #E5C07B\">Int<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">enum<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">CodingKeys<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">String<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #E5C07B\">CodingKey <\/span><span style=\"color: #ABB2BF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E06C75\">page<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #E06C75\">pages<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #E06C75\">total<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E06C75\">perPage<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #56B6C2\">=<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #98C379\">&quot;per_page&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #C678DD\">struct<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">IndicatorResponseMetadata<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">Decodable <\/span><span style=\"color: #ABB2BF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> page: <\/span><span style=\"color: #E5C07B\">Int<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> pages: <\/span><span style=\"color: #E5C07B\">Int<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> perPage: <\/span><span style=\"color: #E5C07B\">Int<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> total: <\/span><span style=\"color: #E5C07B\">Int<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">enum<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">CodingKeys<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">String<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #E5C07B\">CodingKey <\/span><span style=\"color: #ABB2BF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E06C75\">page<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #E06C75\">pages<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #E06C75\">total<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E06C75\">perPage<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #56B6C2\">=<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #98C379\">&quot;per_page&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>&nbsp;3. ViewModels\/CountryViewModel.swift<\/strong> <span style=\"font-weight: 400;\">(Business Logic Layer)<\/span><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Roboto-Mono.ttf\" style=\"font-size:.75rem;font-family:Code-Pro-Roboto-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#abb2bf;--cbp-line-number-width:calc(3 * 0.6 * .75rem);line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282c34\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"import SwiftUI\nimport Combine\n\nclass CountryViewModel: ObservableObject {\n    enum LoadingState {\n        case loading, loaded, error(String)\n    }\n    \n    @Published var loadingState: LoadingState = .loading\n    @Published var groupedCountries: [String: [Country]] = [:]\n    \n    private let countryURL = &quot;https:\/\/api.worldbank.org\/v2\/country?format=json&amp;per_page=300&quot;\n    private let populationURL = &quot;https:\/\/api.worldbank.org\/v2\/country\/all\/indicator\/SP.POP.TOTL?format=json&amp;date=2022&amp;per_page=300&quot;\n    private let gdpURL = &quot;https:\/\/api.worldbank.org\/v2\/country\/all\/indicator\/NY.GDP.MKTP.CD?format=json&amp;date=2022&amp;per_page=300&quot;\n    \n    func fetchAllData() async {\n        do {\n            async let countries = fetchCountries()\n            async let populationData = fetchIndicatorData(url: populationURL)\n            async let gdpData = fetchIndicatorData(url: gdpURL)\n            \n            var finalCountries = try await countries\n            let populationDict = try await populationData\n            let gdpDict = try await gdpData\n            \n            finalCountries = finalCountries.map { country in\n                var modified = country\n                modified.population = populationDict[country.iso2Code]\n                modified.gdp = gdpDict[country.iso2Code]\n                return modified\n            }\n            \n            let filtered = finalCountries.filter {\n                !$0.region.value.lowercased().contains(&quot;aggregate&quot;) &amp;&amp;\n                $0.region.id != &quot;NA&quot; &amp;&amp;\n                $0.capitalCity != &quot;&quot;\n            }\n            \n            let grouped = Dictionary(grouping: filtered) {\n                $0.region.value.trimmingCharacters(in: .whitespacesAndNewlines)\n            }\n            \n            await MainActor.run {\n                groupedCountries = grouped\n                loadingState = .loaded\n            }\n        } catch {\n            await MainActor.run {\n                loadingState = .error(&quot;Failed to load data: \\(error.localizedDescription)&quot;)\n            }\n        }\n    }\n    \n    private func fetchCountries() async throws -&gt; [Country] {\n        struct WorldBankResponse: Decodable {\n            let countries: [Country]\n            \n            init(from decoder: Decoder) throws {\n                var container = try decoder.unkeyedContainer()\n                _ = try container.decode(CountryResponseMetadata.self)\n                countries = try container.decode([Country].self)\n            }\n        }\n        \n        guard let url = URL(string: countryURL) else {\n            throw URLError(.badURL)\n        }\n        \n        let (data, _) = try await URLSession.shared.data(from: url)\n        return try JSONDecoder().decode(WorldBankResponse.self, from: data).countries\n    }\n    \n    private func fetchIndicatorData(url: String) async throws -&gt; [String: Double] {\n        struct IndicatorResponse: Decodable {\n            let entries: [Entry]\n            \n            init(from decoder: Decoder) throws {\n                var container = try decoder.unkeyedContainer()\n                _ = try container.decode(IndicatorResponseMetadata.self)\n                entries = try container.decode([Entry].self)\n            }\n            \n            struct Entry: Decodable {\n                let country: Country\n                let value: Double?\n                \n                struct Country: Decodable {\n                    let id: String\n                }\n            }\n        }\n        \n        guard let url = URL(string: url) else {\n            throw URLError(.badURL)\n        }\n        \n        let (data, _) = try await URLSession.shared.data(from: url)\n        let response = try JSONDecoder().decode(IndicatorResponse.self, from: data)\n        \n        return response.entries.reduce(into: [:]) { dict, entry in\n            guard let value = entry.value else { return }\n            dict[entry.country.id] = value\n        }\n    }\n}\" style=\"color:#abb2bf;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki one-dark-pro\" style=\"background-color: #282c34\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #C678DD\">import<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">SwiftUI<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C678DD\">import<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">Combine<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #C678DD\">class<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">CountryViewModel<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">ObservableObject <\/span><span style=\"color: #ABB2BF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">enum<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">LoadingState<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E06C75\">loading<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #E06C75\">loaded<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #E06C75\">error<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #E5C07B\">String<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">@Published<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">var<\/span><span style=\"color: #ABB2BF\"> loadingState: LoadingState = .<\/span><span style=\"color: #E06C75\">loading<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">@Published<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">var<\/span><span style=\"color: #ABB2BF\"> groupedCountries: [<\/span><span style=\"color: #E5C07B\">String<\/span><span style=\"color: #ABB2BF\">: [Country]] = [<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\">]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">private<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> countryURL = <\/span><span style=\"color: #98C379\">&quot;https:\/\/api.worldbank.org\/v2\/country?format=json&amp;per_page=300&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">private<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> populationURL = <\/span><span style=\"color: #98C379\">&quot;https:\/\/api.worldbank.org\/v2\/country\/all\/indicator\/SP.POP.TOTL?format=json&amp;date=2022&amp;per_page=300&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">private<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> gdpURL = <\/span><span style=\"color: #98C379\">&quot;https:\/\/api.worldbank.org\/v2\/country\/all\/indicator\/NY.GDP.MKTP.CD?format=json&amp;date=2022&amp;per_page=300&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">func<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">fetchAllData<\/span><span style=\"color: #ABB2BF\">() <\/span><span style=\"color: #C678DD\">async<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">do<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">async<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> countries = <\/span><span style=\"color: #61AFEF\">fetchCountries<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">async<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> populationData = <\/span><span style=\"color: #61AFEF\">fetchIndicatorData<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">url<\/span><span style=\"color: #ABB2BF\">: populationURL)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">async<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> gdpData = <\/span><span style=\"color: #61AFEF\">fetchIndicatorData<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">url<\/span><span style=\"color: #ABB2BF\">: gdpURL)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">var<\/span><span style=\"color: #ABB2BF\"> finalCountries = <\/span><span style=\"color: #C678DD\">try<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">await<\/span><span style=\"color: #ABB2BF\"> countries<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> populationDict = <\/span><span style=\"color: #C678DD\">try<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">await<\/span><span style=\"color: #ABB2BF\"> populationData<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> gdpDict = <\/span><span style=\"color: #C678DD\">try<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">await<\/span><span style=\"color: #ABB2BF\"> gdpData<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            finalCountries = finalCountries.<\/span><span style=\"color: #56B6C2\">map<\/span><span style=\"color: #ABB2BF\"> { country <\/span><span style=\"color: #C678DD\">in<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #C678DD\">var<\/span><span style=\"color: #ABB2BF\"> modified = country<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                modified.<\/span><span style=\"color: #E06C75\">population<\/span><span style=\"color: #ABB2BF\"> = populationDict[country.<\/span><span style=\"color: #E06C75\">iso2Code<\/span><span style=\"color: #ABB2BF\">]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                modified.<\/span><span style=\"color: #E06C75\">gdp<\/span><span style=\"color: #ABB2BF\"> = gdpDict[country.<\/span><span style=\"color: #E06C75\">iso2Code<\/span><span style=\"color: #ABB2BF\">]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> modified<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> filtered = finalCountries.<\/span><span style=\"color: #56B6C2\">filter<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                !<\/span><span style=\"color: #E5C07B\">$0<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #E06C75\">region<\/span><span style=\"color: #ABB2BF\">.value.<\/span><span style=\"color: #56B6C2\">lowercased<\/span><span style=\"color: #ABB2BF\">().<\/span><span style=\"color: #56B6C2\">contains<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #98C379\">&quot;aggregate&quot;<\/span><span style=\"color: #ABB2BF\">) &amp;&amp;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #E5C07B\">$0<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #E06C75\">region<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #E06C75\">id<\/span><span style=\"color: #ABB2BF\"> != <\/span><span style=\"color: #98C379\">&quot;NA&quot;<\/span><span style=\"color: #ABB2BF\"> &amp;&amp;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #E5C07B\">$0<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #E06C75\">capitalCity<\/span><span style=\"color: #ABB2BF\"> != <\/span><span style=\"color: #98C379\">&quot;&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> grouped = <\/span><span style=\"color: #E5C07B\">Dictionary<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">grouping<\/span><span style=\"color: #ABB2BF\">: filtered) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #E5C07B\">$0<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #E06C75\">region<\/span><span style=\"color: #ABB2BF\">.value.<\/span><span style=\"color: #61AFEF\">trimmingCharacters<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">in<\/span><span style=\"color: #ABB2BF\">: .<\/span><span style=\"color: #E06C75\">whitespacesAndNewlines<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">await<\/span><span style=\"color: #ABB2BF\"> MainActor.<\/span><span style=\"color: #61AFEF\">run<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                groupedCountries = grouped<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                loadingState = .<\/span><span style=\"color: #E06C75\">loaded<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        } <\/span><span style=\"color: #C678DD\">catch<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">await<\/span><span style=\"color: #ABB2BF\"> MainActor.<\/span><span style=\"color: #61AFEF\">run<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                loadingState = .error(<\/span><span style=\"color: #98C379\">&quot;Failed to load data: <\/span><span style=\"color: #C678DD\">\\(<\/span><span style=\"color: #ABB2BF\">error.<\/span><span style=\"color: #E06C75\">localizedDescription<\/span><span style=\"color: #C678DD\">)<\/span><span style=\"color: #98C379\">&quot;<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">private<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">func<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">fetchCountries<\/span><span style=\"color: #ABB2BF\">() <\/span><span style=\"color: #C678DD\">async<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">throws<\/span><span style=\"color: #ABB2BF\"> -&gt; [Country] {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">struct<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">WorldBankResponse<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">Decodable <\/span><span style=\"color: #ABB2BF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> countries: [Country]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">init<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">from<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #ABB2BF; font-style: italic\">decoder<\/span><span style=\"color: #ABB2BF\">: Decoder) <\/span><span style=\"color: #C678DD\">throws<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #C678DD\">var<\/span><span style=\"color: #ABB2BF\"> container = <\/span><span style=\"color: #C678DD\">try<\/span><span style=\"color: #ABB2BF\"> decoder.<\/span><span style=\"color: #61AFEF\">unkeyedContainer<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                _ = <\/span><span style=\"color: #C678DD\">try<\/span><span style=\"color: #ABB2BF\"> container.<\/span><span style=\"color: #56B6C2\">decode<\/span><span style=\"color: #ABB2BF\">(CountryResponseMetadata.<\/span><span style=\"color: #C678DD\">self<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                countries = <\/span><span style=\"color: #C678DD\">try<\/span><span style=\"color: #ABB2BF\"> container.<\/span><span style=\"color: #56B6C2\">decode<\/span><span style=\"color: #ABB2BF\">([Country].<\/span><span style=\"color: #C678DD\">self<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">guard<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> url = <\/span><span style=\"color: #61AFEF\">URL<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">string<\/span><span style=\"color: #ABB2BF\">: countryURL) <\/span><span style=\"color: #C678DD\">else<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">throw<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">URLError<\/span><span style=\"color: #ABB2BF\">(.<\/span><span style=\"color: #E06C75\">badURL<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> (data, _) = <\/span><span style=\"color: #C678DD\">try<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">await<\/span><span style=\"color: #ABB2BF\"> URLSession.<\/span><span style=\"color: #E06C75\">shared<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #61AFEF\">data<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">from<\/span><span style=\"color: #ABB2BF\">: url)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">try<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">JSONDecoder<\/span><span style=\"color: #ABB2BF\">().<\/span><span style=\"color: #56B6C2\">decode<\/span><span style=\"color: #ABB2BF\">(WorldBankResponse.<\/span><span style=\"color: #C678DD\">self<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">from<\/span><span style=\"color: #ABB2BF\">: data).<\/span><span style=\"color: #E06C75\">countries<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">private<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">func<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">fetchIndicatorData<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF; font-style: italic\">url<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">String<\/span><span style=\"color: #ABB2BF\">) <\/span><span style=\"color: #C678DD\">async<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">throws<\/span><span style=\"color: #ABB2BF\"> -&gt; [<\/span><span style=\"color: #E5C07B\">String<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">Double<\/span><span style=\"color: #ABB2BF\">] {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">struct<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">IndicatorResponse<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">Decodable <\/span><span style=\"color: #ABB2BF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> entries: [Entry]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">init<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">from<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #ABB2BF; font-style: italic\">decoder<\/span><span style=\"color: #ABB2BF\">: Decoder) <\/span><span style=\"color: #C678DD\">throws<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #C678DD\">var<\/span><span style=\"color: #ABB2BF\"> container = <\/span><span style=\"color: #C678DD\">try<\/span><span style=\"color: #ABB2BF\"> decoder.<\/span><span style=\"color: #61AFEF\">unkeyedContainer<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                _ = <\/span><span style=\"color: #C678DD\">try<\/span><span style=\"color: #ABB2BF\"> container.<\/span><span style=\"color: #56B6C2\">decode<\/span><span style=\"color: #ABB2BF\">(IndicatorResponseMetadata.<\/span><span style=\"color: #C678DD\">self<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                entries = <\/span><span style=\"color: #C678DD\">try<\/span><span style=\"color: #ABB2BF\"> container.<\/span><span style=\"color: #56B6C2\">decode<\/span><span style=\"color: #ABB2BF\">([Entry].<\/span><span style=\"color: #C678DD\">self<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">struct<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">Entry<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">Decodable <\/span><span style=\"color: #ABB2BF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> country: Country<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> value: <\/span><span style=\"color: #E5C07B\">Double<\/span><span style=\"color: #ABB2BF\">?<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #C678DD\">struct<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">Country<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">Decodable <\/span><span style=\"color: #ABB2BF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                    <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> id: <\/span><span style=\"color: #E5C07B\">String<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">guard<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> url = <\/span><span style=\"color: #61AFEF\">URL<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">string<\/span><span style=\"color: #ABB2BF\">: url) <\/span><span style=\"color: #C678DD\">else<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">throw<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">URLError<\/span><span style=\"color: #ABB2BF\">(.<\/span><span style=\"color: #E06C75\">badURL<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> (data, _) = <\/span><span style=\"color: #C678DD\">try<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">await<\/span><span style=\"color: #ABB2BF\"> URLSession.<\/span><span style=\"color: #E06C75\">shared<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #61AFEF\">data<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">from<\/span><span style=\"color: #ABB2BF\">: url)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> response = <\/span><span style=\"color: #C678DD\">try<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">JSONDecoder<\/span><span style=\"color: #ABB2BF\">().<\/span><span style=\"color: #56B6C2\">decode<\/span><span style=\"color: #ABB2BF\">(IndicatorResponse.<\/span><span style=\"color: #C678DD\">self<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">from<\/span><span style=\"color: #ABB2BF\">: data)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> response.<\/span><span style=\"color: #E06C75\">entries<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #56B6C2\">reduce<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">into<\/span><span style=\"color: #ABB2BF\">: [<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\">]) { dict, entry <\/span><span style=\"color: #C678DD\">in<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">guard<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> value = entry.value <\/span><span style=\"color: #C678DD\">else<\/span><span style=\"color: #ABB2BF\"> { <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            dict[entry.<\/span><span style=\"color: #E06C75\">country<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #E06C75\">id<\/span><span style=\"color: #ABB2BF\">] = value<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>4. Views\/CountryListView.swift<\/strong> <span style=\"font-weight: 400;\">(UI Layer)<\/span><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Roboto-Mono.ttf\" style=\"font-size:.75rem;font-family:Code-Pro-Roboto-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#abb2bf;--cbp-line-number-width:calc(2 * 0.6 * .75rem);line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282c34\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"import SwiftUI\n\nstruct CountryListView: View {\n    @StateObject private var viewModel = CountryViewModel()\n    \n    var body: some View {\n        NavigationView {\n            Group {\n                switch viewModel.loadingState {\n                case .loading:\n                    ProgressView(&quot;Loading countries...&quot;)\n                case .loaded:\n                    List {\n                        ForEach(viewModel.groupedCountries.keys.sorted(), id: \\.self) { region in\n                            Section(header: Text(region)) {\n                                ForEach(viewModel.groupedCountries[region] ?? []) { country in\n                                    CountryRow(country: country)\n                                }\n                            }\n                        }\n                    }\n                case .error(let message):\n                    Text(message)\n                        .foregroundColor(.red)\n                }\n            }\n            .navigationTitle(&quot;World Countries&quot;)\n        }\n        .task {\n            await viewModel.fetchAllData()\n        }\n    }\n}\nstruct CountryRow: View {\n    let country: Country\n    \n    var body: some View {\n        HStack(spacing: 12) {\n            Text(country.flag)\n                .font(.system(size: 32))\n            \n            VStack(alignment: .leading, spacing: 4) {\n                Text(country.name)\n                    .font(.headline)\n                \n                HStack(spacing: 16) {\n                    Label(country.capitalCity, systemImage: &quot;building.2&quot;)\n                    Text(country.iso2Code)\n                        .monospaced()\n                }\n                .font(.caption)\n                \n                HStack(spacing: 16) {\n                    if let population = country.population {\n                        Label(population.formatted() + &quot; people&quot;, systemImage: &quot;person.2&quot;)\n                    }\n                    if let gdp = country.gdp {\n                        Label(&quot;$&quot; + gdp.formatted(), systemImage: &quot;dollarsign.circle&quot;)\n                    }\n                }\n                .font(.caption)\n                .foregroundColor(.secondary)\n            }\n        }\n    }\n}\" style=\"color:#abb2bf;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki one-dark-pro\" style=\"background-color: #282c34\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #C678DD\">import<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">SwiftUI<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #C678DD\">struct<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">CountryListView<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">View <\/span><span style=\"color: #ABB2BF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">@StateObject<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">private<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">var<\/span><span style=\"color: #ABB2BF\"> viewModel = <\/span><span style=\"color: #61AFEF\">CountryViewModel<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">var<\/span><span style=\"color: #ABB2BF\"> body: <\/span><span style=\"color: #C678DD\">some<\/span><span style=\"color: #ABB2BF\"> View {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #61AFEF\">NavigationView<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">Group<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #C678DD\">switch<\/span><span style=\"color: #ABB2BF\"> viewModel.loadingState {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> .<\/span><span style=\"color: #E06C75\">loading<\/span><span style=\"color: #C678DD\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                    <\/span><span style=\"color: #61AFEF\">ProgressView<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #98C379\">&quot;Loading countries...&quot;<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> .<\/span><span style=\"color: #E06C75\">loaded<\/span><span style=\"color: #C678DD\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                    <\/span><span style=\"color: #61AFEF\">List<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                        <\/span><span style=\"color: #61AFEF\">ForEach<\/span><span style=\"color: #ABB2BF\">(viewModel.<\/span><span style=\"color: #E06C75\">groupedCountries<\/span><span style=\"color: #ABB2BF\">.keys.<\/span><span style=\"color: #56B6C2\">sorted<\/span><span style=\"color: #ABB2BF\">(), <\/span><span style=\"color: #61AFEF\">id<\/span><span style=\"color: #ABB2BF\">: \\.<\/span><span style=\"color: #C678DD\">self<\/span><span style=\"color: #ABB2BF\">) { region <\/span><span style=\"color: #C678DD\">in<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                            <\/span><span style=\"color: #61AFEF\">Section<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">header<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Text<\/span><span style=\"color: #ABB2BF\">(region)) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                                <\/span><span style=\"color: #61AFEF\">ForEach<\/span><span style=\"color: #ABB2BF\">(viewModel.<\/span><span style=\"color: #E06C75\">groupedCountries<\/span><span style=\"color: #ABB2BF\">[region] ?? []) { country <\/span><span style=\"color: #C678DD\">in<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                                    <\/span><span style=\"color: #61AFEF\">CountryRow<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">country<\/span><span style=\"color: #ABB2BF\">: country)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                                }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                            }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> .error(<\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> message)<\/span><span style=\"color: #C678DD\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                    <\/span><span style=\"color: #61AFEF\">Text<\/span><span style=\"color: #ABB2BF\">(message)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                        .<\/span><span style=\"color: #61AFEF\">foregroundColor<\/span><span style=\"color: #ABB2BF\">(.<\/span><span style=\"color: #E06C75\">red<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            .<\/span><span style=\"color: #61AFEF\">navigationTitle<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #98C379\">&quot;World Countries&quot;<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        .<\/span><span style=\"color: #61AFEF\">task<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">await<\/span><span style=\"color: #ABB2BF\"> viewModel.<\/span><span style=\"color: #61AFEF\">fetchAllData<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C678DD\">struct<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">CountryRow<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">View <\/span><span style=\"color: #ABB2BF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> country: Country<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">var<\/span><span style=\"color: #ABB2BF\"> body: <\/span><span style=\"color: #C678DD\">some<\/span><span style=\"color: #ABB2BF\"> View {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #61AFEF\">HStack<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">spacing<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">12<\/span><span style=\"color: #ABB2BF\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">Text<\/span><span style=\"color: #ABB2BF\">(country.<\/span><span style=\"color: #E06C75\">flag<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                .<\/span><span style=\"color: #61AFEF\">font<\/span><span style=\"color: #ABB2BF\">(.<\/span><span style=\"color: #61AFEF\">system<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">size<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">32<\/span><span style=\"color: #ABB2BF\">))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">VStack<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">alignment<\/span><span style=\"color: #ABB2BF\">: .<\/span><span style=\"color: #E06C75\">leading<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">spacing<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">4<\/span><span style=\"color: #ABB2BF\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #61AFEF\">Text<\/span><span style=\"color: #ABB2BF\">(country.<\/span><span style=\"color: #E06C75\">name<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                    .<\/span><span style=\"color: #61AFEF\">font<\/span><span style=\"color: #ABB2BF\">(.<\/span><span style=\"color: #E06C75\">headline<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #61AFEF\">HStack<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">spacing<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">16<\/span><span style=\"color: #ABB2BF\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                    <\/span><span style=\"color: #61AFEF\">Label<\/span><span style=\"color: #ABB2BF\">(country.<\/span><span style=\"color: #E06C75\">capitalCity<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">systemImage<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #98C379\">&quot;building.2&quot;<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                    <\/span><span style=\"color: #61AFEF\">Text<\/span><span style=\"color: #ABB2BF\">(country.<\/span><span style=\"color: #E06C75\">iso2Code<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                        .<\/span><span style=\"color: #61AFEF\">monospaced<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                .<\/span><span style=\"color: #61AFEF\">font<\/span><span style=\"color: #ABB2BF\">(.<\/span><span style=\"color: #E06C75\">caption<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #61AFEF\">HStack<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">spacing<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">16<\/span><span style=\"color: #ABB2BF\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                    <\/span><span style=\"color: #C678DD\">if<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> population = country.population {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                        <\/span><span style=\"color: #61AFEF\">Label<\/span><span style=\"color: #ABB2BF\">(population.<\/span><span style=\"color: #61AFEF\">formatted<\/span><span style=\"color: #ABB2BF\">() + <\/span><span style=\"color: #98C379\">&quot; people&quot;<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">systemImage<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #98C379\">&quot;person.2&quot;<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                    <\/span><span style=\"color: #C678DD\">if<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> gdp = country.gdp {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                        <\/span><span style=\"color: #61AFEF\">Label<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #98C379\">&quot;$&quot;<\/span><span style=\"color: #ABB2BF\"> + gdp.<\/span><span style=\"color: #61AFEF\">formatted<\/span><span style=\"color: #ABB2BF\">(), <\/span><span style=\"color: #61AFEF\">systemImage<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #98C379\">&quot;dollarsign.circle&quot;<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                .<\/span><span style=\"color: #61AFEF\">font<\/span><span style=\"color: #ABB2BF\">(.<\/span><span style=\"color: #E06C75\">caption<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                .<\/span><span style=\"color: #61AFEF\">foregroundColor<\/span><span style=\"color: #ABB2BF\">(.<\/span><span style=\"color: #E06C75\">secondary<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u042d\u0442\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442:<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><span style=\"font-weight: 400;\">\u0427\u0435\u0442\u043a\u0443\u044e \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443: \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0448\u0430\u0431\u043b\u043e\u043d\u0443 MVVM \u0441 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u0441\u043b\u043e\u044f\u043c\u0438<\/span><\/li>\n\n\n\n<li><span style=\"font-weight: 400;\">\u0422\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u043c\u043e\u0441\u0442\u044c: <code>View Model <\/code>\u043c\u043e\u0436\u043d\u043e \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e<\/span><\/li>\n\n\n\n<li><span style=\"font-weight: 400;\">\u0423\u0434\u043e\u0431\u0441\u0442\u0432\u043e \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u044f: \u043a\u0430\u0436\u0434\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u043d\u0435\u0441\u0435\u0442 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u044c<\/span><\/li>\n\n\n\n<li><span style=\"font-weight: 400;\">\u041f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435: \u043c\u043e\u0434\u0435\u043b\u0438 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f\u0445<\/span><\/li>\n\n\n\n<li><span style=\"font-weight: 400;\">\u041c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c\u043e\u0441\u0442\u044c: \u043b\u0435\u0433\u043a\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438\u043b\u0438 \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435<\/span><\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u041a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044f:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><span style=\"font-weight: 400;\">\u041c\u043e\u0434\u0435\u043b\u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 <code>Codable<\/code> \u043b\u043e\u0433\u0438\u043a\u0443<\/span><\/li>\n\n\n\n<li><span style=\"font-weight: 400;\"><code>View Model <\/code>\u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0432\u0441\u044e \u0431\u0438\u0437\u043d\u0435\u0441-\u043b\u043e\u0433\u0438\u043a\u0443&nbsp;<\/span><\/li>\n\n\n\n<li><span style=\"font-weight: 400;\"><code>Views<\/code> \u0441\u043e\u0441\u0440\u0435\u0434\u043e\u0442\u043e\u0447\u0435\u043d\u044b \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0430 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438<\/span><\/li>\n\n\n\n<li><span style=\"font-weight: 400;\">\u041c\u043e\u0434\u0435\u043b\u0438 <code>API<\/code> \u043e\u0442\u0432\u0435\u0442\u043e\u0432 <code>response<\/code> \u043e\u0442\u0434\u0435\u043b\u0435\u043d\u044b \u043e\u0442 \u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438<\/span><\/li>\n\n\n\n<li><span style=\"font-weight: 400;\">\u0426\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043e\u0448\u0438\u0431\u043e\u043a \u0432 <code>View Model<\/code><\/span><\/li>\n\n\n\n<li><span style=\"font-weight: 400;\">\u0421\u0435\u0442\u0435\u0432\u043e\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u0442\u0438\u043f\u043e\u0432 \u0441 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u043c \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u0435\u043c \u043e\u0448\u0438\u0431\u043e\u043a<\/span><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u0417<span style=\"font-weight: 400;\">\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 &#8212; \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0441\u044f, \u0442\u0430\u043a \u043a\u0430\u043a \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0439 \u043c\u044b \u043d\u0435 \u0432\u043d\u0435\u0441\u043b\u0438:<\/span><\/p>\n\n\n\n<figure class=\"wp-block-image is-resized\"><img decoding=\"async\" src=\"https:\/\/lh7-rt.googleusercontent.com\/docsz\/AD_4nXf03ICfrkUQM4-pPOquzBJWt3cS_0pVlftja53_zKSR3fy4lKihJkbJ1_D_gzBAVqUjOZlWYVLs3uGs9c1i3mAEveMoeq7mDxOp3zcTkfYLYRbOcuDiglshYlvjaLyKKtLf5TgE?key=jZ3H_Ic4-xgqXIV3TW-rCUlR\" alt=\"\" style=\"width:352px;height:auto\"\/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043e\u0448\u0438\u0431\u043e\u043a<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u0422\u0435\u043f\u0435\u0440\u044c \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0443\u043b\u0443\u0447\u0448\u0438\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u043e\u0448\u0438\u0431\u043e\u043a \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e do {&nbsp; } catch {&nbsp; } \u0431\u043b\u043e\u043a\u0430.<\/span><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-rt.googleusercontent.com\/docsz\/AD_4nXeQiWg_8ZdH6sRtPdhkg9Kd4iySaMlGNR2MrTNlUxIrSoHtJfQM3DbRDCGPVB0QGBWS5vnqFK-bF-TyEVI21Yy4C3KOIn_6a_qRJmtpEWEBfqWZQ2aQaq55TJsjyEtgyc0tQW4L?key=jZ3H_Ic4-xgqXIV3TW-rCUlR\" alt=\"\"\/><\/figure>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td class=\"has-text-align-right\" data-align=\"right\"><span style=\"font-weight: 400;\">\u0414\u043e\u0431\u0430\u0432\u044c\u0442\u0435 &nbsp;do {&nbsp; } catch {&nbsp; } \u0431\u043b\u043e\u043a\u0438 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432\u044b\u0431\u043e\u0440\u043a\u0438 fetch<\/span><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0440\u0430\u0441\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0437\u0430\u043d\u044f\u043b\u0438 27 \u0441\u0435\u043a\u0443\u043d\u0434:<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-rt.googleusercontent.com\/docsz\/AD_4nXffj2ZBje4b8x-ui0q8UkCec4u9A5sHZPGTtIESIRbe8NEUdqeAzecjFGYuISqaPQoorkD_Eh6to_sd2S8Y345dPi23SKJHNcaUmJPbi4M01oyL9NjoGvxjbxPVCgJ_edTesMQQxw?key=jZ3H_Ic4-xgqXIV3TW-rCUlR\" alt=\"\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u0412\u043e\u0442 \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u044d\u0442\u0438\u0445 \u0440\u0430\u0441\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u0439:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\u0425\u043e\u0440\u043e\u0448\u043e, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0437\u0430\u0439\u043c\u0435\u043c\u0441\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0431\u043b\u043e\u043a\u043e\u0432<code> do-catch<\/code> \u043a \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c <code>fetch <\/code>\u0432 <code>CountryViewModel<\/code>. \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0445\u043e\u0447\u0435\u0442, \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043e\u0448\u0438\u0431\u043e\u043a \u0431\u044b\u043b\u0430 \u0431\u043e\u043b\u0435\u0435 \u044f\u0432\u043d\u043e\u0439 \u0438 \u043b\u043e\u043a\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0439. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043c\u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434, \u0447\u0442\u043e\u0431\u044b \u0443\u0432\u0438\u0434\u0435\u0442\u044c, \u0433\u0434\u0435 \u043c\u043e\u0433\u0443\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442\u044c \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f, \u0438 \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0432\u0441\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0438 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c.<br><br>\u0420\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438 `<code>fetchCountries()<\/code>` \u0438 `<code>fetchIndicatorData(url:)<\/code>`, \u044f \u0437\u0430\u043c\u0435\u0447\u0430\u044e, \u0447\u0442\u043e \u0432 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u043e\u043d\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u043e\u0434\u0438\u043d \u0431\u043b\u043e\u043a `<code>do-catch<\/code>` \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 `<code>fetchAllData()<\/code>`. \u0425\u043e\u0442\u044f \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043b\u0443\u0447\u0448\u0435 \u0438\u043c\u0435\u0442\u044c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u043e\u0448\u0438\u0431\u043e\u043a \u0431\u043b\u0438\u0436\u0435 \u043a \u0442\u043e\u043c\u0443 \u043c\u0435\u0441\u0442\u0443, \u0433\u0434\u0435 \u043c\u043e\u0433\u0443\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0438, \u0434\u043b\u044f \u0431\u043e\u043b\u0435\u0435 \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043a\u0430\u0436\u0434\u044b\u0439 \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043c\u043e\u0436\u0435\u0442 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0438 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f, \u0430 <code>View Model<\/code> \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0430\u0445.<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">\u0412 `<code>fetchCountries()`<\/code> \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u043c\u0438 \u0442\u043e\u0447\u043a\u0430\u043c\u0438 \u0441\u0431\u043e\u044f \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f:<br><br>1. \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 <code>URL<\/code> \u0438\u0437 \u0441\u0442\u0440\u043e\u043a\u0438.<br>2. \u0412\u044b\u0431\u043e\u0440\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u0441\u0435\u0442\u0438.<br>3. \u0414\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 <code>JSON<\/code> \u043e\u0442\u0432\u0435\u0442\u0430 <code>response<\/code>.<br><br>\u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e, \u0432 `<code>fetchIndicatorData(url:)<\/code>` \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u0442\u0435 \u0436\u0435 \u043f\u0443\u043d\u043a\u0442\u044b, \u043f\u043b\u044e\u0441 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 <code>entries<\/code> \u0438 \u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 <code>value<\/code>.<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">\u042f \u043d\u0430\u0447\u043d\u0443 \u0441 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043e\u0431\u0435\u0440\u043d\u0443 \u043a\u0430\u0436\u0434\u0443\u044e \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u044e\u0449\u0443\u044e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e \u0432 \u0441\u0432\u043e\u0439 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0431\u043b\u043e\u043a `<code>do-catch<\/code>`. \u0414\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f <code>URL<\/code>, \u0435\u0441\u043b\u0438 <code>URL<\/code> \u043d\u0435\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u0435\u043d, \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0432\u044b\u0434\u0430\u0442\u044c `<code>URLError.badURL<\/code>`. \u041f\u0440\u0438 \u0432\u044b\u0431\u043e\u0440\u043a\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u043e\u0433\u0443\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442\u044c \u0441\u0435\u0442\u0435\u0432\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0443 \u0438\u043b\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c. \u041e\u0448\u0438\u0431\u043a\u0438 \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u043e\u0433\u0443\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442\u044c, \u0435\u0441\u043b\u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 <code>JSON<\/code> \u043d\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043d\u0430\u0448\u0438\u043c \u043c\u043e\u0434\u0435\u043b\u044f\u043c.<br><br>\u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043d\u043e\u0439 \u043e\u0448\u0438\u0431\u043a\u0438 \u044f \u0437\u0430\u043f\u0438\u0448\u0443 \u043e\u043f\u0438\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e \u201c\u0432\u044b\u0431\u0440\u043e\u0448\u0443\u201d&nbsp; <code>throws<\/code> \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u043d\u044f\u0442\u043d\u0443\u044e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u043e\u0448\u0438\u0431\u043a\u0443. \u042d\u0442\u043e \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0432 \u043e\u0442\u043b\u0430\u0434\u043a\u0435 \u0438 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442, \u0447\u0442\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043f\u043e\u043b\u0443\u0447\u0438\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u043e\u0431\u0440\u0430\u0442\u043d\u0443\u044e \u0441\u0432\u044f\u0437\u044c. \u0412 `<code>fetchAllData()<\/code>`\u0432 <code>View Model <\/code>\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u044e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u043e\u0448\u0438\u0431\u043e\u043a, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u043b\u043e\u0432\u0438\u0442\u044c \u044d\u0442\u0438 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0438 \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 <code>loadingState<\/code> \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c.<br><br>\u041c\u043d\u0435 \u0442\u0430\u043a\u0436\u0435 \u043d\u0443\u0436\u043d\u043e \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0432\u0441\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u0432 <code>View Model<\/code>, \u0447\u0442\u043e\u0431\u044b <code>UI<\/code> \u043c\u043e\u0433 \u043e\u0442\u0440\u0430\u0436\u0430\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435. \u042d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0448\u0438\u0431\u043e\u043a \u0431\u043e\u043b\u0435\u0435 \u043d\u0438\u0437\u043a\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u0432 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e.<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">\u0422\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044f \u0438\u043c\u0435\u0435\u0442 \u0440\u0435\u0448\u0430\u044e\u0449\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0435\u0442, \u0435\u0441\u043b\u0438 <code>API<\/code> \u0432\u0435\u0440\u043d\u0435\u0442 \u043d\u0435\u043f\u0440\u0435\u0434\u0432\u0438\u0434\u0435\u043d\u043d\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 <code>JSON<\/code>? \u0414\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c\u0441\u044f \u043d\u0435\u0443\u0434\u0430\u0447\u0435\u0439, \u0438 \u043e\u0448\u0438\u0431\u043a\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0447\u0435\u043d\u0430 \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u0430. \u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e, \u0435\u0441\u043b\u0438 \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u0438\u0441\u0442\u0435\u043a\u0430\u0435\u0442 \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0431\u043b\u043e\u043a catch \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u0438\u0442\u044c \u044d\u0442\u043e \u0438 \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c <code>UI<\/code>.<br><br>\u0415\u0449\u0435 \u043e\u0434\u043d\u043e \u0441\u043e\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u2014 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0430\u0445. \u0412\u043c\u0435\u0441\u0442\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043d\u0435\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0445 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0439 \u043e\u0448\u0438\u0431\u043e\u043a \u043e\u043d\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0443\u0434\u043e\u0431\u043d\u044b\u043c\u0438 \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u0435 \"<code>The Internet connection appears to be offline<\/code>.\" (\u00ab\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0443, \u043f\u043e\u0445\u043e\u0436\u0435, \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u043e\u00bb) \u043d\u0430 \"<code>No internet connection. Please check your network settings.<\/code>\" (\u00ab\u041d\u0435\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0443. \u041f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0441\u0435\u0442\u0438\u00bb).<br><br>\u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u044f \u043f\u0440\u043e\u0432\u0435\u0440\u044e, \u0447\u0442\u043e \u0432\u0441\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044e\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u043a\u0443 \u0441\u0442\u0440\u0430\u043d \u043f\u043e \u0440\u0435\u0433\u0438\u043e\u043d\u0430\u043c \u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445. \u0412\u0430\u0436\u043d\u043e \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0431\u043b\u043e\u043a\u043e\u0432 <code>do-catch <\/code>\u043d\u0435 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u044e \u043d\u043e\u0432\u044b\u0445 \u043e\u0448\u0438\u0431\u043e\u043a \u0438\u043b\u0438 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044e \u043f\u043e\u0442\u043e\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445.<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e:<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u0412\u043e\u0442 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u0430\u044f <code>View Model <\/code>\u0441 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u043e\u0439 \u043e\u0448\u0438\u0431\u043e\u043a \u0432 \u043a\u0430\u0436\u0434\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432\u044b\u0431\u043e\u0440\u043a\u0438:<\/span><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Roboto-Mono.ttf\" style=\"font-size:.75rem;font-family:Code-Pro-Roboto-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#abb2bf;--cbp-line-number-width:calc(3 * 0.6 * .75rem);line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282c34\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"class CountryViewModel: ObservableObject {\n    \/\/ ... existing properties and enums ...\n    \n    func fetchAllData() async {\n        do {\n            async let countries = try fetchCountries()\n            async let populationData = \n                          try fetchIndicatorData(url: populationURL)\n            async let gdpData = try fetchIndicatorData(url: gdpURL)\n            \n            let (finalCountries, populationDict, gdpDict) = \n                           try await (countries, populationData, gdpData)\n            \n            let mergedCountries = mergeData(\n                countries: finalCountries,\n                population: populationDict,\n                gdp: gdpDict\n            )\n            \n            await MainActor.run {\n                groupedCountries = groupedCountries\n                loadingState = .loaded\n            }\n        } catch {\n            await handleError(error)\n        }\n    }\n    \n    private func fetchCountries() async throws -&gt; [Country] {\n        do {\n            guard let url = URL(string: countryURL) else {\n                throw APIError.invalidURL\n            }\n            \n            let (data, response) = \n                             try await URLSession.shared.data(from: url)\n            \n            guard let httpResponse = response as? HTTPURLResponse,\n                  (200...299).contains(httpResponse.statusCode) else {\n                throw APIError.invalidResponse\n            }\n            \n            return try decodeCountries(from: data)\n        } catch {\n            throw handleFetchError(error, context: &quot;countries&quot;)\n        }\n    }\n    \n    private func fetchIndicatorData(url: String) async throws -&gt; [String: Double] {\n        do {\n            guard let url = URL(string: url) else {\n                throw APIError.invalidURL\n            }\n            \n            let (data, response) = \n                            try await URLSession.shared.data(from: url)\n            \n            guard let httpResponse = response as? HTTPURLResponse,\n                  (200...299).contains(httpResponse.statusCode) else {\n                throw APIError.invalidResponse\n            }\n            \n            return try decodeIndicatorData(from: data)\n        } catch {\n            throw handleFetchError(error, context: &quot;indicator data&quot;)\n        }\n    }\n    \n    \/\/ MARK: - Decoding Helpers\n    private func decodeCountries(from data: Data) throws -&gt; [Country] {\n        do {\n            struct WorldBankResponse: Decodable {\n                let countries: [Country]\n                \n                init(from decoder: Decoder) throws {\n                    var container = try decoder.unkeyedContainer()\n                    _ = try container.decode(CountryResponseMetadata.self)\n                    countries = try container.decode([Country].self)\n                }\n            }\n            return try JSONDecoder().decode(WorldBankResponse.self, \n                                                 from: data).countries\n        } catch {\n            throw APIError.decodingFailed(\n                message: &quot;Countries decoding failed: \\(error.localizedDescription)&quot;\n            )\n        }\n    }\n    \n    private func decodeIndicatorData(from data: Data) throws -&gt; [String: Double] {\n        do {\n            struct IndicatorResponse: Decodable {\n                let entries: [Entry]\n                \n                init(from decoder: Decoder) throws {\n                    var container = try decoder.unkeyedContainer()\n                    _ = try container.decode(IndicatorResponseMetadata.self)\n                    entries = try container.decode([Entry].self)\n                }\n                \n                struct Entry: Decodable {\n                    let country: CountryEntry\n                    let value: Double?\n                    \n                    struct CountryEntry: Decodable {\n                        let id: String\n                    }\n                }\n            }\n            \n            let response = \n               try JSONDecoder().decode(IndicatorResponse.self, from: data)\n            return response.entries.reduce(into: [:]) { dict, entry in\n                guard let value = entry.value else { return }\n                dict[entry.country.id] = value\n            }\n        } catch {\n            throw APIError.decodingFailed(\n                message: &quot;Indicator data decoding failed: \\(error.localizedDescription)&quot;\n            )\n        }\n    }\n    \n    \/\/ MARK: - Error Handling\n    private func handleError(_ error: Error) async {\n        let message: String\n        switch error {\n        case let apiError as APIError:\n            message = apiError.localizedDescription\n        case let urlError as URLError:\n            message = handleUrlError(urlError)\n        default:\n            message = &quot;Unknown error: \\(error.localizedDescription)&quot;\n        }\n        \n        await MainActor.run {\n            loadingState = .error(message)\n        }\n    }\n    \n    private func handleUrlError(_ error: URLError) -&gt; String {\n        switch error.code {\n        case .notConnectedToInternet:\n            return &quot;No internet connection. Please check your network settings.&quot;\n        case .timedOut:\n            return &quot;Request timed out. Please try again later.&quot;\n        case .networkConnectionLost:\n            return &quot;Network connection lost. Please check your connection.&quot;\n        default:\n            return &quot;Network error: \\(error.localizedDescription)&quot;\n        }\n    }\n    \n    private func handleFetchError(_ error: Error, context: String) -&gt; Error {\n        print(&quot;Error fetching \\(context): \\(error)&quot;)\n        if let apiError = error as? APIError {\n            return apiError\n        }\n        return APIError.requestFailed(\n            message: &quot;Failed to fetch \\(context): \\(error.localizedDescription)&quot;\n        )\n    }\n    \n    \/\/ MARK: - Data Processing\n    private func mergeData(\n        countries: [Country],\n        population: [String: Double],\n        gdp: [String: Double]\n    ) -&gt; [String: [Country]] {\n        let filtered = countries\n            .map { country in\n                var modified = country\n                modified.population =    \n                        population[country.iso2Code].flatMap(Int.init)\n                modified.gdp = gdp[country.iso2Code]\n                return modified\n            }\n            .filter {\n                !$0.region.value.lowercased().contains(&quot;aggregate&quot;) &amp;&amp;\n                $0.region.id != &quot;NA&quot; &amp;&amp;\n                !$0.capitalCity.isEmpty\n            }\n        \n        return Dictionary(grouping: filtered) {\n            $0.region.value.trimmingCharacters(in: .whitespacesAndNewlines)\n        }\n    }\n}\n\n\/\/ Error Types\nenum APIError: LocalizedError {\n    case invalidURL\n    case invalidResponse\n    case decodingFailed(message: String)\n    case requestFailed(message: String)\n    \n    var errorDescription: String? {\n        switch self {\n        case .invalidURL:\n            return &quot;Invalid API endpoint URL&quot;\n        case .invalidResponse:\n            return &quot;Received invalid response from server&quot;\n        case .decodingFailed(let message):\n            return &quot;Data parsing failed: \\(message)&quot;\n        case .requestFailed(let message):\n            return &quot;Network request failed: \\(message)&quot;\n        }\n    }\n}\" style=\"color:#abb2bf;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki one-dark-pro\" style=\"background-color: #282c34\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #C678DD\">class<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">CountryViewModel<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">ObservableObject <\/span><span style=\"color: #ABB2BF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ ... existing properties and enums ...<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">func<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">fetchAllData<\/span><span style=\"color: #ABB2BF\">() <\/span><span style=\"color: #C678DD\">async<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">do<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">async<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> countries = <\/span><span style=\"color: #C678DD\">try<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">fetchCountries<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">async<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> populationData = <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                          <\/span><span style=\"color: #C678DD\">try<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">fetchIndicatorData<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">url<\/span><span style=\"color: #ABB2BF\">: populationURL)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">async<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> gdpData = <\/span><span style=\"color: #C678DD\">try<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">fetchIndicatorData<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">url<\/span><span style=\"color: #ABB2BF\">: gdpURL)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> (finalCountries, populationDict, gdpDict) = <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                           <\/span><span style=\"color: #C678DD\">try<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">await<\/span><span style=\"color: #ABB2BF\"> (countries, populationData, gdpData)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> mergedCountries = <\/span><span style=\"color: #61AFEF\">mergeData<\/span><span style=\"color: #ABB2BF\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #61AFEF\">countries<\/span><span style=\"color: #ABB2BF\">: finalCountries,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #61AFEF\">population<\/span><span style=\"color: #ABB2BF\">: populationDict,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #61AFEF\">gdp<\/span><span style=\"color: #ABB2BF\">: gdpDict<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">await<\/span><span style=\"color: #ABB2BF\"> MainActor.<\/span><span style=\"color: #61AFEF\">run<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                groupedCountries = groupedCountries<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                loadingState = .<\/span><span style=\"color: #E06C75\">loaded<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        } <\/span><span style=\"color: #C678DD\">catch<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">await<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">handleError<\/span><span style=\"color: #ABB2BF\">(error)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">private<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">func<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">fetchCountries<\/span><span style=\"color: #ABB2BF\">() <\/span><span style=\"color: #C678DD\">async<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">throws<\/span><span style=\"color: #ABB2BF\"> -&gt; [Country] {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">do<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">guard<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> url = <\/span><span style=\"color: #61AFEF\">URL<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">string<\/span><span style=\"color: #ABB2BF\">: countryURL) <\/span><span style=\"color: #C678DD\">else<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #C678DD\">throw<\/span><span style=\"color: #ABB2BF\"> APIError.<\/span><span style=\"color: #E06C75\">invalidURL<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> (data, response) = <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                             <\/span><span style=\"color: #C678DD\">try<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">await<\/span><span style=\"color: #ABB2BF\"> URLSession.<\/span><span style=\"color: #E06C75\">shared<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #61AFEF\">data<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">from<\/span><span style=\"color: #ABB2BF\">: url)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">guard<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> httpResponse = response as? HTTPURLResponse,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                  (<\/span><span style=\"color: #D19A66\">200<\/span><span style=\"color: #ABB2BF\">...<\/span><span style=\"color: #D19A66\">299<\/span><span style=\"color: #ABB2BF\">).<\/span><span style=\"color: #56B6C2\">contains<\/span><span style=\"color: #ABB2BF\">(httpResponse.<\/span><span style=\"color: #E06C75\">statusCode<\/span><span style=\"color: #ABB2BF\">) <\/span><span style=\"color: #C678DD\">else<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #C678DD\">throw<\/span><span style=\"color: #ABB2BF\"> APIError.<\/span><span style=\"color: #E06C75\">invalidResponse<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">try<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">decodeCountries<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">from<\/span><span style=\"color: #ABB2BF\">: data)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        } <\/span><span style=\"color: #C678DD\">catch<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">throw<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">handleFetchError<\/span><span style=\"color: #ABB2BF\">(error, <\/span><span style=\"color: #61AFEF\">context<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #98C379\">&quot;countries&quot;<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">private<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">func<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">fetchIndicatorData<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF; font-style: italic\">url<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">String<\/span><span style=\"color: #ABB2BF\">) <\/span><span style=\"color: #C678DD\">async<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">throws<\/span><span style=\"color: #ABB2BF\"> -&gt; [<\/span><span style=\"color: #E5C07B\">String<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">Double<\/span><span style=\"color: #ABB2BF\">] {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">do<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">guard<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> url = <\/span><span style=\"color: #61AFEF\">URL<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">string<\/span><span style=\"color: #ABB2BF\">: url) <\/span><span style=\"color: #C678DD\">else<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #C678DD\">throw<\/span><span style=\"color: #ABB2BF\"> APIError.<\/span><span style=\"color: #E06C75\">invalidURL<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> (data, response) = <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                            <\/span><span style=\"color: #C678DD\">try<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">await<\/span><span style=\"color: #ABB2BF\"> URLSession.<\/span><span style=\"color: #E06C75\">shared<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #61AFEF\">data<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">from<\/span><span style=\"color: #ABB2BF\">: url)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">guard<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> httpResponse = response as? HTTPURLResponse,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                  (<\/span><span style=\"color: #D19A66\">200<\/span><span style=\"color: #ABB2BF\">...<\/span><span style=\"color: #D19A66\">299<\/span><span style=\"color: #ABB2BF\">).<\/span><span style=\"color: #56B6C2\">contains<\/span><span style=\"color: #ABB2BF\">(httpResponse.<\/span><span style=\"color: #E06C75\">statusCode<\/span><span style=\"color: #ABB2BF\">) <\/span><span style=\"color: #C678DD\">else<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #C678DD\">throw<\/span><span style=\"color: #ABB2BF\"> APIError.<\/span><span style=\"color: #E06C75\">invalidResponse<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">try<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">decodeIndicatorData<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">from<\/span><span style=\"color: #ABB2BF\">: data)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        } <\/span><span style=\"color: #C678DD\">catch<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">throw<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">handleFetchError<\/span><span style=\"color: #ABB2BF\">(error, <\/span><span style=\"color: #61AFEF\">context<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #98C379\">&quot;indicator data&quot;<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ MARK: - Decoding Helpers<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">private<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">func<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">decodeCountries<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">from<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #ABB2BF; font-style: italic\">data<\/span><span style=\"color: #ABB2BF\">: Data) <\/span><span style=\"color: #C678DD\">throws<\/span><span style=\"color: #ABB2BF\"> -&gt; [Country] {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">do<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">struct<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">WorldBankResponse<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">Decodable <\/span><span style=\"color: #ABB2BF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> countries: [Country]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #C678DD\">init<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">from<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #ABB2BF; font-style: italic\">decoder<\/span><span style=\"color: #ABB2BF\">: Decoder) <\/span><span style=\"color: #C678DD\">throws<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                    <\/span><span style=\"color: #C678DD\">var<\/span><span style=\"color: #ABB2BF\"> container = <\/span><span style=\"color: #C678DD\">try<\/span><span style=\"color: #ABB2BF\"> decoder.<\/span><span style=\"color: #61AFEF\">unkeyedContainer<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                    _ = <\/span><span style=\"color: #C678DD\">try<\/span><span style=\"color: #ABB2BF\"> container.<\/span><span style=\"color: #56B6C2\">decode<\/span><span style=\"color: #ABB2BF\">(CountryResponseMetadata.<\/span><span style=\"color: #C678DD\">self<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                    countries = <\/span><span style=\"color: #C678DD\">try<\/span><span style=\"color: #ABB2BF\"> container.<\/span><span style=\"color: #56B6C2\">decode<\/span><span style=\"color: #ABB2BF\">([Country].<\/span><span style=\"color: #C678DD\">self<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">try<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">JSONDecoder<\/span><span style=\"color: #ABB2BF\">().<\/span><span style=\"color: #56B6C2\">decode<\/span><span style=\"color: #ABB2BF\">(WorldBankResponse.<\/span><span style=\"color: #C678DD\">self<\/span><span style=\"color: #ABB2BF\">, <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                                                 <\/span><span style=\"color: #61AFEF\">from<\/span><span style=\"color: #ABB2BF\">: data).<\/span><span style=\"color: #E06C75\">countries<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        } <\/span><span style=\"color: #C678DD\">catch<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">throw<\/span><span style=\"color: #ABB2BF\"> APIError.<\/span><span style=\"color: #61AFEF\">decodingFailed<\/span><span style=\"color: #ABB2BF\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #61AFEF\">message<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #98C379\">&quot;Countries decoding failed: <\/span><span style=\"color: #C678DD\">\\(<\/span><span style=\"color: #ABB2BF\">error.<\/span><span style=\"color: #E06C75\">localizedDescription<\/span><span style=\"color: #C678DD\">)<\/span><span style=\"color: #98C379\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">private<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">func<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">decodeIndicatorData<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">from<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #ABB2BF; font-style: italic\">data<\/span><span style=\"color: #ABB2BF\">: Data) <\/span><span style=\"color: #C678DD\">throws<\/span><span style=\"color: #ABB2BF\"> -&gt; [<\/span><span style=\"color: #E5C07B\">String<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">Double<\/span><span style=\"color: #ABB2BF\">] {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">do<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">struct<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">IndicatorResponse<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">Decodable <\/span><span style=\"color: #ABB2BF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> entries: [Entry]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #C678DD\">init<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">from<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #ABB2BF; font-style: italic\">decoder<\/span><span style=\"color: #ABB2BF\">: Decoder) <\/span><span style=\"color: #C678DD\">throws<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                    <\/span><span style=\"color: #C678DD\">var<\/span><span style=\"color: #ABB2BF\"> container = <\/span><span style=\"color: #C678DD\">try<\/span><span style=\"color: #ABB2BF\"> decoder.<\/span><span style=\"color: #61AFEF\">unkeyedContainer<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                    _ = <\/span><span style=\"color: #C678DD\">try<\/span><span style=\"color: #ABB2BF\"> container.<\/span><span style=\"color: #56B6C2\">decode<\/span><span style=\"color: #ABB2BF\">(IndicatorResponseMetadata.<\/span><span style=\"color: #C678DD\">self<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                    entries = <\/span><span style=\"color: #C678DD\">try<\/span><span style=\"color: #ABB2BF\"> container.<\/span><span style=\"color: #56B6C2\">decode<\/span><span style=\"color: #ABB2BF\">([Entry].<\/span><span style=\"color: #C678DD\">self<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #C678DD\">struct<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">Entry<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">Decodable <\/span><span style=\"color: #ABB2BF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                    <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> country: CountryEntry<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                    <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> value: <\/span><span style=\"color: #E5C07B\">Double<\/span><span style=\"color: #ABB2BF\">?<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                    <\/span><span style=\"color: #C678DD\">struct<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">CountryEntry<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">Decodable <\/span><span style=\"color: #ABB2BF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                        <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> id: <\/span><span style=\"color: #E5C07B\">String<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> response = <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">               <\/span><span style=\"color: #C678DD\">try<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">JSONDecoder<\/span><span style=\"color: #ABB2BF\">().<\/span><span style=\"color: #56B6C2\">decode<\/span><span style=\"color: #ABB2BF\">(IndicatorResponse.<\/span><span style=\"color: #C678DD\">self<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">from<\/span><span style=\"color: #ABB2BF\">: data)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> response.<\/span><span style=\"color: #E06C75\">entries<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #56B6C2\">reduce<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">into<\/span><span style=\"color: #ABB2BF\">: [<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\">]) { dict, entry <\/span><span style=\"color: #C678DD\">in<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #C678DD\">guard<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> value = entry.value <\/span><span style=\"color: #C678DD\">else<\/span><span style=\"color: #ABB2BF\"> { <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                dict[entry.<\/span><span style=\"color: #E06C75\">country<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #E06C75\">id<\/span><span style=\"color: #ABB2BF\">] = value<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        } <\/span><span style=\"color: #C678DD\">catch<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">throw<\/span><span style=\"color: #ABB2BF\"> APIError.<\/span><span style=\"color: #61AFEF\">decodingFailed<\/span><span style=\"color: #ABB2BF\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #61AFEF\">message<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #98C379\">&quot;Indicator data decoding failed: <\/span><span style=\"color: #C678DD\">\\(<\/span><span style=\"color: #ABB2BF\">error.<\/span><span style=\"color: #E06C75\">localizedDescription<\/span><span style=\"color: #C678DD\">)<\/span><span style=\"color: #98C379\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ MARK: - Error Handling<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">private<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">func<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">handleError<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">_<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #ABB2BF; font-style: italic\">error<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">Error<\/span><span style=\"color: #ABB2BF\">) <\/span><span style=\"color: #C678DD\">async<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> message: <\/span><span style=\"color: #E5C07B\">String<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">switch<\/span><span style=\"color: #ABB2BF\"> error {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> apiError as APIError<\/span><span style=\"color: #C678DD\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            message = apiError.<\/span><span style=\"color: #E06C75\">localizedDescription<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> urlError as URLError<\/span><span style=\"color: #C678DD\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            message = <\/span><span style=\"color: #61AFEF\">handleUrlError<\/span><span style=\"color: #ABB2BF\">(urlError)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">default:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            message = <\/span><span style=\"color: #98C379\">&quot;Unknown error: <\/span><span style=\"color: #C678DD\">\\(<\/span><span style=\"color: #ABB2BF\">error.<\/span><span style=\"color: #E06C75\">localizedDescription<\/span><span style=\"color: #C678DD\">)<\/span><span style=\"color: #98C379\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">await<\/span><span style=\"color: #ABB2BF\"> MainActor.<\/span><span style=\"color: #61AFEF\">run<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            loadingState = .error(message)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">private<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">func<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">handleUrlError<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">_<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #ABB2BF; font-style: italic\">error<\/span><span style=\"color: #ABB2BF\">: URLError) -&gt; <\/span><span style=\"color: #E5C07B\">String<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">switch<\/span><span style=\"color: #ABB2BF\"> error.code {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> .<\/span><span style=\"color: #E06C75\">notConnectedToInternet<\/span><span style=\"color: #C678DD\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #98C379\">&quot;No internet connection. Please check your network settings.&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> .<\/span><span style=\"color: #E06C75\">timedOut<\/span><span style=\"color: #C678DD\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #98C379\">&quot;Request timed out. Please try again later.&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> .<\/span><span style=\"color: #E06C75\">networkConnectionLost<\/span><span style=\"color: #C678DD\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #98C379\">&quot;Network connection lost. Please check your connection.&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">default:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #98C379\">&quot;Network error: <\/span><span style=\"color: #C678DD\">\\(<\/span><span style=\"color: #ABB2BF\">error.<\/span><span style=\"color: #E06C75\">localizedDescription<\/span><span style=\"color: #C678DD\">)<\/span><span style=\"color: #98C379\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">private<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">func<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">handleFetchError<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">_<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #ABB2BF; font-style: italic\">error<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">Error<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF; font-style: italic\">context<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">String<\/span><span style=\"color: #ABB2BF\">) -&gt; <\/span><span style=\"color: #E5C07B\">Error<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #56B6C2\">print<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #98C379\">&quot;Error fetching <\/span><span style=\"color: #C678DD\">\\(<\/span><span style=\"color: #ABB2BF\">context<\/span><span style=\"color: #C678DD\">)<\/span><span style=\"color: #98C379\">: <\/span><span style=\"color: #C678DD\">\\(<\/span><span style=\"color: #ABB2BF\">error<\/span><span style=\"color: #C678DD\">)<\/span><span style=\"color: #98C379\">&quot;<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">if<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> apiError = error as? APIError {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> apiError<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> APIError.<\/span><span style=\"color: #61AFEF\">requestFailed<\/span><span style=\"color: #ABB2BF\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">message<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #98C379\">&quot;Failed to fetch <\/span><span style=\"color: #C678DD\">\\(<\/span><span style=\"color: #ABB2BF\">context<\/span><span style=\"color: #C678DD\">)<\/span><span style=\"color: #98C379\">: <\/span><span style=\"color: #C678DD\">\\(<\/span><span style=\"color: #ABB2BF\">error.<\/span><span style=\"color: #E06C75\">localizedDescription<\/span><span style=\"color: #C678DD\">)<\/span><span style=\"color: #98C379\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ MARK: - Data Processing<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">private<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">func<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">mergeData<\/span><span style=\"color: #ABB2BF\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #61AFEF; font-style: italic\">countries<\/span><span style=\"color: #ABB2BF\">: [Country],<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #61AFEF; font-style: italic\">population<\/span><span style=\"color: #ABB2BF\">: [<\/span><span style=\"color: #E5C07B\">String<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">Double<\/span><span style=\"color: #ABB2BF\">],<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #61AFEF; font-style: italic\">gdp<\/span><span style=\"color: #ABB2BF\">: [<\/span><span style=\"color: #E5C07B\">String<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">Double<\/span><span style=\"color: #ABB2BF\">]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    ) -&gt; [<\/span><span style=\"color: #E5C07B\">String<\/span><span style=\"color: #ABB2BF\">: [Country]] {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> filtered = countries<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            .<\/span><span style=\"color: #56B6C2\">map<\/span><span style=\"color: #ABB2BF\"> { country <\/span><span style=\"color: #C678DD\">in<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #C678DD\">var<\/span><span style=\"color: #ABB2BF\"> modified = country<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                modified.<\/span><span style=\"color: #E06C75\">population<\/span><span style=\"color: #ABB2BF\"> =    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                        population[country.<\/span><span style=\"color: #E06C75\">iso2Code<\/span><span style=\"color: #ABB2BF\">].<\/span><span style=\"color: #56B6C2\">flatMap<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #E5C07B\">Int<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #C678DD\">init<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                modified.<\/span><span style=\"color: #E06C75\">gdp<\/span><span style=\"color: #ABB2BF\"> = gdp[country.<\/span><span style=\"color: #E06C75\">iso2Code<\/span><span style=\"color: #ABB2BF\">]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> modified<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            .<\/span><span style=\"color: #56B6C2\">filter<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                !<\/span><span style=\"color: #E5C07B\">$0<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #E06C75\">region<\/span><span style=\"color: #ABB2BF\">.value.<\/span><span style=\"color: #56B6C2\">lowercased<\/span><span style=\"color: #ABB2BF\">().<\/span><span style=\"color: #56B6C2\">contains<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #98C379\">&quot;aggregate&quot;<\/span><span style=\"color: #ABB2BF\">) &amp;&amp;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #E5C07B\">$0<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #E06C75\">region<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #E06C75\">id<\/span><span style=\"color: #ABB2BF\"> != <\/span><span style=\"color: #98C379\">&quot;NA&quot;<\/span><span style=\"color: #ABB2BF\"> &amp;&amp;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                !<\/span><span style=\"color: #E5C07B\">$0<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #E06C75\">capitalCity<\/span><span style=\"color: #ABB2BF\">.isEmpty<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">Dictionary<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">grouping<\/span><span style=\"color: #ABB2BF\">: filtered) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #E5C07B\">$0<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #E06C75\">region<\/span><span style=\"color: #ABB2BF\">.value.<\/span><span style=\"color: #61AFEF\">trimmingCharacters<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">in<\/span><span style=\"color: #ABB2BF\">: .<\/span><span style=\"color: #E06C75\">whitespacesAndNewlines<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #7F848E; font-style: italic\">\/\/ Error Types<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C678DD\">enum<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">APIError<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">LocalizedError <\/span><span style=\"color: #ABB2BF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E06C75\">invalidURL<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E06C75\">invalidResponse<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E06C75\">decodingFailed<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #ABB2BF; font-style: italic\">message<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">String<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E06C75\">requestFailed<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #ABB2BF; font-style: italic\">message<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">String<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">var<\/span><span style=\"color: #ABB2BF\"> errorDescription: <\/span><span style=\"color: #E5C07B\">String<\/span><span style=\"color: #ABB2BF\">? {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">switch<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">self<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> .<\/span><span style=\"color: #E06C75\">invalidURL<\/span><span style=\"color: #C678DD\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #98C379\">&quot;Invalid API endpoint URL&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> .<\/span><span style=\"color: #E06C75\">invalidResponse<\/span><span style=\"color: #C678DD\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #98C379\">&quot;Received invalid response from server&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> .<\/span><span style=\"color: #61AFEF\">decodingFailed<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> message)<\/span><span style=\"color: #C678DD\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #98C379\">&quot;Data parsing failed: <\/span><span style=\"color: #C678DD\">\\(<\/span><span style=\"color: #ABB2BF\">message<\/span><span style=\"color: #C678DD\">)<\/span><span style=\"color: #98C379\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> .<\/span><span style=\"color: #61AFEF\">requestFailed<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> message)<\/span><span style=\"color: #C678DD\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #98C379\">&quot;Network request failed: <\/span><span style=\"color: #C678DD\">\\(<\/span><span style=\"color: #ABB2BF\">message<\/span><span style=\"color: #C678DD\">)<\/span><span style=\"color: #98C379\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u041a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044f \u0432 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043e\u0448\u0438\u0431\u043e\u043a:<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>1, \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043e\u0448\u0438\u0431\u043e\u043a:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><span style=\"font-weight: 400;\">\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0435 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 &nbsp; <code>enum APIError <\/code>\u0441 \u043b\u043e\u043a\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f\u043c\u0438<\/span><\/li>\n\n\n\n<li><span style=\"font-weight: 400;\">\u041e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0442\u0438\u043f\u044b \u043e\u0448\u0438\u0431\u043e\u043a \u0434\u043b\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0435\u0432 \u0441\u0431\u043e\u0435\u0432<\/span><\/li>\n\n\n\n<li><span style=\"font-weight: 400;\">\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043e\u0448\u0438\u0431\u043e\u043a URL-\u0430\u0434\u0440\u0435\u0441\u0430<\/span><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>2. \u0413\u0440\u0430\u043d\u0443\u043b\u044f\u0440\u043d\u044b\u0435 \u0431\u043b\u043e\u043a\u0438 try \/ \u0441atch:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><span style=\"font-weight: 400;\">\u041e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043e\u0448\u0438\u0431\u043e\u043a \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0432\u044b\u0431\u043e\u0440\u043a\u0438<\/span><\/li>\n\n\n\n<li><span style=\"font-weight: 400;\">\u042f\u0432\u043d\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043e\u0448\u0438\u0431\u043e\u043a \u0434\u043b\u044f \u043a\u043e\u0434\u043e\u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f HTTP<\/span><\/li>\n\n\n\n<li><span style=\"font-weight: 400;\">\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0430\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043e\u0448\u0438\u0431\u043e\u043a \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/span><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>3. \u0420\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u043e\u0448\u0438\u0431\u043e\u043a:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><span style=\"font-weight: 400;\">\u041e\u0448\u0438\u0431\u043a\u0438 \u0432\u0441\u043f\u043b\u044b\u0432\u0430\u044e\u0442 \u0441 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u043c\u0438, \u0437\u0430\u0432\u0438\u0441\u044f\u0449\u0438\u043c\u0438 \u043e\u0442 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430<\/span><\/li>\n\n\n\n<li><span style=\"font-weight: 400;\">\u0426\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u0430\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043e\u0448\u0438\u0431\u043e\u043a \u0432 \u043c\u0435\u0442\u043e\u0434\u0435 <code>handleError<\/code><\/span><\/li>\n\n\n\n<li><span style=\"font-weight: 400;\">\u0423\u0434\u043e\u0431\u043d\u044b\u0435 \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0430\u0445<\/span><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>4. \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0441\u0435\u0442\u0435\u0432\u044b\u0445 \u043e\u0448\u0438\u0431\u043e\u043a:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><span style=\"font-weight: 400;\">\u041e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u0435 \u0441\u0435\u0442\u0435\u0432\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 (\u0442\u0430\u0439\u043c-\u0430\u0443\u0442, \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f)<\/span><\/li>\n\n\n\n<li><span style=\"font-weight: 400;\">\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u043a\u043e\u0434\u044b \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043e\u0442\u0432\u0435\u0442\u0430 HTTP<\/span><\/li>\n\n\n\n<li><span style=\"font-weight: 400;\">\u041f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 URL-\u0430\u0434\u0440\u0435\u0441\u0430 \u043f\u0435\u0440\u0435\u0434 \u0437\u0430\u043f\u0440\u043e\u0441\u0430\u043c\u0438<\/span><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>5. \u0411\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><span style=\"font-weight: 400;\">\u041e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u043e\u0439 \u043e\u0448\u0438\u0431\u043e\u043a<\/span><\/li>\n\n\n\n<li><span style=\"font-weight: 400;\">\u0422\u0438\u043f-\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u0439 \u0430\u043d\u0430\u043b\u0438\u0437 JSON<\/span><\/li>\n\n\n\n<li><span style=\"font-weight: 400;\">\u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0430\u0445 \u0432\u043a\u043b\u044e\u0447\u0430\u044e\u0442 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/span><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>6. \u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u043e\u0448\u0438\u0431\u043e\u043a:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><span style=\"font-weight: 400;\">\u041a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u0430\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u0434\u043b\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0438<\/span><\/li>\n\n\n\n<li><span style=\"font-weight: 400;\">\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0431\u0435\u0437 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438<\/span><\/li>\n\n\n\n<li><span style=\"font-weight: 400;\">\u041a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u044b\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0430\u0445 (\u043a\u0430\u043a\u043e\u0439 \u0442\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0435 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b)<\/span><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u042d\u0442\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><span style=\"font-weight: 400;\">\u041b\u0443\u0447\u0448\u0443\u044e \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u043e\u0448\u0438\u0431\u043e\u043a \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432<\/span><\/li>\n\n\n\n<li><span style=\"font-weight: 400;\">\u0411\u043e\u043b\u0435\u0435 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0430\u0445 \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439<\/span><\/li>\n\n\n\n<li><span style=\"font-weight: 400;\">\u0411\u043e\u043b\u0435\u0435 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u0435 \u0441\u0435\u0442\u0435\u0432\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438<\/span><\/li>\n\n\n\n<li><span style=\"font-weight: 400;\">\u041f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c<\/span><\/li>\n\n\n\n<li><span style=\"font-weight: 400;\">\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u043e\u0448\u0438\u0431\u043a\u0438 \u0434\u043b\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0438<\/span><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438 \u0438\u043c\u0435\u0435\u043c \u0442\u043e\u0442 \u0436\u0435 UI, \u043d\u043e \u0443\u0436\u0435 \u0441 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u043e\u0439 \u043e\u0448\u0438\u0431\u043e\u043a:<\/span><\/p>\n\n\n\n<figure class=\"wp-block-image is-resized\"><img decoding=\"async\" src=\"https:\/\/lh7-rt.googleusercontent.com\/docsz\/AD_4nXf8buxXGFCFCMOxkY5Mq4mRPXr6WjbAycdkCqtmSy5pRGvK6SNde-bnGQePSAEnvToUCSlItFl9mBdHHGx616DYHq7AFJxCNC0wf53rn_aIubD7xSLclM0VoyJ_uP4wBVCor3FE?key=jZ3H_Ic4-xgqXIV3TW-rCUlR\" alt=\"\" style=\"width:334px;height:auto\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0435 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0432 \u043f\u043e\u0441\u0442\u0435 <a href=\"https:\/\/bestkora.com\/IosDeveloper\/\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435-deepseek-\u043f\u0440\u0438-\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438-ios-\u043f\u0440\u0438\u043b\u043e\u0436-3\/\" title=\"\">&#171;\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 DeepSeek \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f Countries \u0421\u0442\u0440\u0430\u043d\u044b \u041c\u0438\u0440\u0430. \u0427\u0430\u0441\u0442\u044c 3. Swift 6 concurrency \u0438 Map.&#187;<\/a><\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u042d\u0442\u043e \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0435. \u041d\u0430\u0447\u0430\u043b\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043f\u043e\u0441\u0442\u0435 &#171;\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 DeepSeek \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f Countries \u0421\u0442\u0440\u0430\u043d\u044b \u041c\u0438\u0440\u0430. \u0427\u0430\u0441\u0442\u044c 1. \u0421\u043f\u0438\u0441\u043e\u043a \u0441\u0442\u0440\u0430\u043d.&#187;. \u041a\u043e\u0434 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430 Github. \u041a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0440\u0443\u0435\u043c \u043f\u043e\u043b\u044f \u0432 \u0418\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0435&nbsp; \u0418 \u043e\u043f\u044f\u0442\u044c \u0432&nbsp; \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441 \u043d\u0430\u0441\u0435\u043b\u0435\u043d\u0438\u0435\u043c, \u0412\u0412\u041f, \u0441\u0442\u043e\u043b\u0438\u0446\u044b \u0438 \u044d\u043c\u043e\u0434\u0437\u0438 \u0444\u043b\u0430\u0433\u0430 \u043c\u044b &hellip; <a href=\"https:\/\/bestkora.com\/IosDeveloper\/%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-deepseek-%d0%bf%d1%80%d0%b8-%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%b8%d0%b8-ios-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6-2\/\">\u0427\u0438\u0442\u0430\u0442\u044c \u0434\u0430\u043b\u0435\u0435 <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[131,125,133,124,54,132],"tags":[127,31,56,134],"class_list":["post-16637","post","type-post","status-publish","format-standard","hentry","category-ai","category-concurrency","category-deepseek","category-swift-6","category-swiftui","category-132","tag-concurrency","tag-swift","tag-swiftui","tag--deepseek"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.8 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u042d\u0442\u043e \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0435. \u041d\u0430\u0447\u0430\u043b\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043f\u043e\u0441\u0442\u0435 &quot;\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 DeepSeek \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f Countries \u0421\u0442\u0440\u0430\u043d\u044b \u041c\u0438\u0440\u0430. \u0427\u0430\u0441\u0442\u044c 1. \u0421\u043f\u0438\u0441\u043e\u043a \u0441\u0442\u0440\u0430\u043d.&quot;. \u041a\u043e\u0434 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430 Github. \u041a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0440\u0443\u0435\u043c \u043f\u043e\u043b\u044f \u0432 \u0418\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0435 \u0418 \u043e\u043f\u044f\u0442\u044c \u0432 \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441 \u043d\u0430\u0441\u0435\u043b\u0435\u043d\u0438\u0435\u043c, \u0412\u0412\u041f, \u0441\u0442\u043e\u043b\u0438\u0446\u044b \u0438 \u044d\u043c\u043e\u0434\u0437\u0438 \u0444\u043b\u0430\u0433\u0430 \u043c\u044b \u0438\u043c\u0435\u0435\u043c \u041d\u0415\u0412\u0415\u0420\u041d\u042b\u0419 \u043a\u043e\u0434 \u0434\u043b\u044f ResponseMetadata struct ResponseMetadata: Decodable { let page: Int let pages: Int\" \/>\n\t<meta name=\"robots\" content=\"max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n\t<meta name=\"author\" content=\"tatiana.kornilova@gmail.com\"\/>\n\t<meta name=\"keywords\" content=\"swift concurrency\" \/>\n\t<link rel=\"canonical\" href=\"https:\/\/bestkora.com\/IosDeveloper\/%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-deepseek-%d0%bf%d1%80%d0%b8-%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%b8%d0%b8-ios-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6-2\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.8\" \/>\n\t\t<meta property=\"og:locale\" content=\"ru_RU\" \/>\n\t\t<meta property=\"og:site_name\" content=\"\u041e\u0431\u0443\u0447\u0430\u044e\u0449\u0438\u0439 \u043a\u0443\u0440\u0441 \u043f\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 iOS+Swift \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439. | \u0420\u0443\u0441\u0441\u043a\u0438\u0439 \u043d\u0435\u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u043d\u0441\u043f\u0435\u043a\u0442 \u043b\u0435\u043a\u0446\u0438\u0439 \u0421\u0442\u044d\u043d\u0444\u043e\u0440\u0434\u0441\u043a\u043e\u0433\u043e \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0430 &quot; \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439&quot; 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 , 2023,  2024,  2025  \u0438 2026 \u0433\u0433., \u0441\u043e\u043f\u0440\u043e\u0432\u043e\u0436\u0434\u0430\u0435\u043c\u044b\u0439 \u0440\u0435\u0448\u0435\u043d\u0438\u044f\u043c\u0438 \u0437\u0430\u0434\u0430\u043d\u0438\u0439 \u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f\u043c\u0438, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u043c\u0438 \u0441 \u0430\u0434\u0430\u043f\u0442\u0430\u0446\u0438\u0435\u0439 \u043a\u0443\u0440\u0441\u043e\u0432 \u043a \u043d\u043e\u0432\u044b\u043c \u0432\u0435\u0440\u0441\u0438\u044f\u043c Swift, Objective-C \u0438 iOS.\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 DeepSeek \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f Countries \u0421\u0442\u0440\u0430\u043d\u044b \u041c\u0438\u0440\u0430. \u0427\u0430\u0441\u0442\u044c 2. \u0427\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u0441\u0435\u043b\u0435\u043d\u0438\u044f, \u0412\u0412\u041f, \u0444\u043b\u0430\u0433. | \u041e\u0431\u0443\u0447\u0430\u044e\u0449\u0438\u0439 \u043a\u0443\u0440\u0441 \u043f\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 iOS+Swift \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439.\" \/>\n\t\t<meta property=\"og:description\" content=\"\u042d\u0442\u043e \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0435. \u041d\u0430\u0447\u0430\u043b\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043f\u043e\u0441\u0442\u0435 &quot;\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 DeepSeek \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f Countries \u0421\u0442\u0440\u0430\u043d\u044b \u041c\u0438\u0440\u0430. \u0427\u0430\u0441\u0442\u044c 1. \u0421\u043f\u0438\u0441\u043e\u043a \u0441\u0442\u0440\u0430\u043d.&quot;. \u041a\u043e\u0434 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430 Github. \u041a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0440\u0443\u0435\u043c \u043f\u043e\u043b\u044f \u0432 \u0418\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0435 \u0418 \u043e\u043f\u044f\u0442\u044c \u0432 \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441 \u043d\u0430\u0441\u0435\u043b\u0435\u043d\u0438\u0435\u043c, \u0412\u0412\u041f, \u0441\u0442\u043e\u043b\u0438\u0446\u044b \u0438 \u044d\u043c\u043e\u0434\u0437\u0438 \u0444\u043b\u0430\u0433\u0430 \u043c\u044b \u0438\u043c\u0435\u0435\u043c \u041d\u0415\u0412\u0415\u0420\u041d\u042b\u0419 \u043a\u043e\u0434 \u0434\u043b\u044f ResponseMetadata struct ResponseMetadata: Decodable { let page: Int let pages: Int\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/bestkora.com\/IosDeveloper\/%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-deepseek-%d0%bf%d1%80%d0%b8-%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%b8%d0%b8-ios-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6-2\/\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2025-02-16T15:31:36+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2025-02-24T13:23:12+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary\" \/>\n\t\t<meta name=\"twitter:title\" content=\"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 DeepSeek \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f Countries \u0421\u0442\u0440\u0430\u043d\u044b \u041c\u0438\u0440\u0430. \u0427\u0430\u0441\u0442\u044c 2. \u0427\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u0441\u0435\u043b\u0435\u043d\u0438\u044f, \u0412\u0412\u041f, \u0444\u043b\u0430\u0433. | \u041e\u0431\u0443\u0447\u0430\u044e\u0449\u0438\u0439 \u043a\u0443\u0440\u0441 \u043f\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 iOS+Swift \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439.\" \/>\n\t\t<meta name=\"twitter:description\" content=\"\u042d\u0442\u043e \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0435. \u041d\u0430\u0447\u0430\u043b\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043f\u043e\u0441\u0442\u0435 &quot;\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 DeepSeek \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f Countries \u0421\u0442\u0440\u0430\u043d\u044b \u041c\u0438\u0440\u0430. \u0427\u0430\u0441\u0442\u044c 1. \u0421\u043f\u0438\u0441\u043e\u043a \u0441\u0442\u0440\u0430\u043d.&quot;. \u041a\u043e\u0434 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430 Github. \u041a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0440\u0443\u0435\u043c \u043f\u043e\u043b\u044f \u0432 \u0418\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0435 \u0418 \u043e\u043f\u044f\u0442\u044c \u0432 \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441 \u043d\u0430\u0441\u0435\u043b\u0435\u043d\u0438\u0435\u043c, \u0412\u0412\u041f, \u0441\u0442\u043e\u043b\u0438\u0446\u044b \u0438 \u044d\u043c\u043e\u0434\u0437\u0438 \u0444\u043b\u0430\u0433\u0430 \u043c\u044b \u0438\u043c\u0435\u0435\u043c \u041d\u0415\u0412\u0415\u0420\u041d\u042b\u0419 \u043a\u043e\u0434 \u0434\u043b\u044f ResponseMetadata struct ResponseMetadata: Decodable { let page: Int let pages: Int\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-deepseek-%d0%bf%d1%80%d0%b8-%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%b8%d0%b8-ios-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6-2\\\/#article\",\"name\":\"\\u0418\\u0441\\u043f\\u043e\\u043b\\u044c\\u0437\\u043e\\u0432\\u0430\\u043d\\u0438\\u0435 DeepSeek \\u043f\\u0440\\u0438 \\u0441\\u043e\\u0437\\u0434\\u0430\\u043d\\u0438\\u0438 iOS \\u043f\\u0440\\u0438\\u043b\\u043e\\u0436\\u0435\\u043d\\u0438\\u044f Countries \\u0421\\u0442\\u0440\\u0430\\u043d\\u044b \\u041c\\u0438\\u0440\\u0430. \\u0427\\u0430\\u0441\\u0442\\u044c 2. \\u0427\\u0438\\u0441\\u043b\\u0435\\u043d\\u043d\\u043e\\u0441\\u0442\\u044c \\u043d\\u0430\\u0441\\u0435\\u043b\\u0435\\u043d\\u0438\\u044f, \\u0412\\u0412\\u041f, \\u0444\\u043b\\u0430\\u0433. | \\u041e\\u0431\\u0443\\u0447\\u0430\\u044e\\u0449\\u0438\\u0439 \\u043a\\u0443\\u0440\\u0441 \\u043f\\u043e \\u0440\\u0430\\u0437\\u0440\\u0430\\u0431\\u043e\\u0442\\u043a\\u0435 iOS+Swift \\u043f\\u0440\\u0438\\u043b\\u043e\\u0436\\u0435\\u043d\\u0438\\u0439.\",\"headline\":\"\\u0418\\u0441\\u043f\\u043e\\u043b\\u044c\\u0437\\u043e\\u0432\\u0430\\u043d\\u0438\\u0435 DeepSeek \\u043f\\u0440\\u0438 \\u0441\\u043e\\u0437\\u0434\\u0430\\u043d\\u0438\\u0438 iOS \\u043f\\u0440\\u0438\\u043b\\u043e\\u0436\\u0435\\u043d\\u0438\\u044f Countries \\u0421\\u0442\\u0440\\u0430\\u043d\\u044b \\u041c\\u0438\\u0440\\u0430. \\u0427\\u0430\\u0441\\u0442\\u044c 2. \\u0427\\u0438\\u0441\\u043b\\u0435\\u043d\\u043d\\u043e\\u0441\\u0442\\u044c \\u043d\\u0430\\u0441\\u0435\\u043b\\u0435\\u043d\\u0438\\u044f, \\u0412\\u0412\\u041f, \\u0444\\u043b\\u0430\\u0433.\",\"author\":{\"@id\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/author\\\/tatiana-lornilovagmail-com\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/#person\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/lh7-rt.googleusercontent.com\\\/docsz\\\/AD_4nXfLfuNbNxfsydGqU2aq-9tugy6B8wC7fkwJaBCxu-7keUh4S9Dd0wgdgFW7xfOBt78-08Fh2hLwKipajzQqMmRuhO7BpLx_vlOVHlWe-g9_P4-KNwTwoNMKgtbKZTmQGeHBvfZ-nA?key=jZ3H_Ic4-xgqXIV3TW-rCUlR\",\"@id\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-deepseek-%d0%bf%d1%80%d0%b8-%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%b8%d0%b8-ios-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6-2\\\/#articleImage\"},\"datePublished\":\"2025-02-16T15:31:36+00:00\",\"dateModified\":\"2025-02-24T13:23:12+00:00\",\"inLanguage\":\"ru-RU\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-deepseek-%d0%bf%d1%80%d0%b8-%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%b8%d0%b8-ios-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6-2\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-deepseek-%d0%bf%d1%80%d0%b8-%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%b8%d0%b8-ios-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6-2\\\/#webpage\"},\"articleSection\":\"AI, Concurrency, DeepSeek, Swift 6, SwiftUI, \\u0418\\u0418, Concurrency, Swift, SwiftUI, \\u0418\\u0418 DeepSeek\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-deepseek-%d0%bf%d1%80%d0%b8-%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%b8%d0%b8-ios-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6-2\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/category\\\/swiftui\\\/#listItem\",\"name\":\"SwiftUI\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/category\\\/swiftui\\\/#listItem\",\"position\":2,\"name\":\"SwiftUI\",\"item\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/category\\\/swiftui\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-deepseek-%d0%bf%d1%80%d0%b8-%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%b8%d0%b8-ios-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6-2\\\/#listItem\",\"name\":\"\\u0418\\u0441\\u043f\\u043e\\u043b\\u044c\\u0437\\u043e\\u0432\\u0430\\u043d\\u0438\\u0435 DeepSeek \\u043f\\u0440\\u0438 \\u0441\\u043e\\u0437\\u0434\\u0430\\u043d\\u0438\\u0438 iOS \\u043f\\u0440\\u0438\\u043b\\u043e\\u0436\\u0435\\u043d\\u0438\\u044f Countries \\u0421\\u0442\\u0440\\u0430\\u043d\\u044b \\u041c\\u0438\\u0440\\u0430. \\u0427\\u0430\\u0441\\u0442\\u044c 2. \\u0427\\u0438\\u0441\\u043b\\u0435\\u043d\\u043d\\u043e\\u0441\\u0442\\u044c \\u043d\\u0430\\u0441\\u0435\\u043b\\u0435\\u043d\\u0438\\u044f, \\u0412\\u0412\\u041f, \\u0444\\u043b\\u0430\\u0433.\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-deepseek-%d0%bf%d1%80%d0%b8-%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%b8%d0%b8-ios-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6-2\\\/#listItem\",\"position\":3,\"name\":\"\\u0418\\u0441\\u043f\\u043e\\u043b\\u044c\\u0437\\u043e\\u0432\\u0430\\u043d\\u0438\\u0435 DeepSeek \\u043f\\u0440\\u0438 \\u0441\\u043e\\u0437\\u0434\\u0430\\u043d\\u0438\\u0438 iOS \\u043f\\u0440\\u0438\\u043b\\u043e\\u0436\\u0435\\u043d\\u0438\\u044f Countries \\u0421\\u0442\\u0440\\u0430\\u043d\\u044b \\u041c\\u0438\\u0440\\u0430. \\u0427\\u0430\\u0441\\u0442\\u044c 2. \\u0427\\u0438\\u0441\\u043b\\u0435\\u043d\\u043d\\u043e\\u0441\\u0442\\u044c \\u043d\\u0430\\u0441\\u0435\\u043b\\u0435\\u043d\\u0438\\u044f, \\u0412\\u0412\\u041f, \\u0444\\u043b\\u0430\\u0433.\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/category\\\/swiftui\\\/#listItem\",\"name\":\"SwiftUI\"}}]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/#person\",\"name\":\"tatiana.kornilova@gmail.com\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-deepseek-%d0%bf%d1%80%d0%b8-%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%b8%d0%b8-ios-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6-2\\\/#personImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/33ccc19059014d8a7849c3621afa2b66a5f3e50ac7291c91c30ff35df5747628?s=96&d=mm&r=g\",\"width\":96,\"height\":96,\"caption\":\"tatiana.kornilova@gmail.com\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/author\\\/tatiana-lornilovagmail-com\\\/#author\",\"url\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/author\\\/tatiana-lornilovagmail-com\\\/\",\"name\":\"tatiana.kornilova@gmail.com\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-deepseek-%d0%bf%d1%80%d0%b8-%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%b8%d0%b8-ios-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6-2\\\/#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/33ccc19059014d8a7849c3621afa2b66a5f3e50ac7291c91c30ff35df5747628?s=96&d=mm&r=g\",\"width\":96,\"height\":96,\"caption\":\"tatiana.kornilova@gmail.com\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-deepseek-%d0%bf%d1%80%d0%b8-%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%b8%d0%b8-ios-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6-2\\\/#webpage\",\"url\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-deepseek-%d0%bf%d1%80%d0%b8-%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%b8%d0%b8-ios-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6-2\\\/\",\"name\":\"\\u0418\\u0441\\u043f\\u043e\\u043b\\u044c\\u0437\\u043e\\u0432\\u0430\\u043d\\u0438\\u0435 DeepSeek \\u043f\\u0440\\u0438 \\u0441\\u043e\\u0437\\u0434\\u0430\\u043d\\u0438\\u0438 iOS \\u043f\\u0440\\u0438\\u043b\\u043e\\u0436\\u0435\\u043d\\u0438\\u044f Countries \\u0421\\u0442\\u0440\\u0430\\u043d\\u044b \\u041c\\u0438\\u0440\\u0430. \\u0427\\u0430\\u0441\\u0442\\u044c 2. \\u0427\\u0438\\u0441\\u043b\\u0435\\u043d\\u043d\\u043e\\u0441\\u0442\\u044c \\u043d\\u0430\\u0441\\u0435\\u043b\\u0435\\u043d\\u0438\\u044f, \\u0412\\u0412\\u041f, \\u0444\\u043b\\u0430\\u0433. | \\u041e\\u0431\\u0443\\u0447\\u0430\\u044e\\u0449\\u0438\\u0439 \\u043a\\u0443\\u0440\\u0441 \\u043f\\u043e \\u0440\\u0430\\u0437\\u0440\\u0430\\u0431\\u043e\\u0442\\u043a\\u0435 iOS+Swift \\u043f\\u0440\\u0438\\u043b\\u043e\\u0436\\u0435\\u043d\\u0438\\u0439.\",\"description\":\"\\u042d\\u0442\\u043e \\u043f\\u0440\\u043e\\u0434\\u043e\\u043b\\u0436\\u0435\\u043d\\u0438\\u0435. \\u041d\\u0430\\u0447\\u0430\\u043b\\u043e \\u043d\\u0430\\u0445\\u043e\\u0434\\u0438\\u0442\\u0441\\u044f \\u0432 \\u043f\\u043e\\u0441\\u0442\\u0435 \\\"\\u0418\\u0441\\u043f\\u043e\\u043b\\u044c\\u0437\\u043e\\u0432\\u0430\\u043d\\u0438\\u0435 DeepSeek \\u043f\\u0440\\u0438 \\u0441\\u043e\\u0437\\u0434\\u0430\\u043d\\u0438\\u0438 iOS \\u043f\\u0440\\u0438\\u043b\\u043e\\u0436\\u0435\\u043d\\u0438\\u044f Countries \\u0421\\u0442\\u0440\\u0430\\u043d\\u044b \\u041c\\u0438\\u0440\\u0430. \\u0427\\u0430\\u0441\\u0442\\u044c 1. \\u0421\\u043f\\u0438\\u0441\\u043e\\u043a \\u0441\\u0442\\u0440\\u0430\\u043d.\\\". \\u041a\\u043e\\u0434 \\u043d\\u0430\\u0445\\u043e\\u0434\\u0438\\u0442\\u0441\\u044f \\u043d\\u0430 Github. \\u041a\\u043e\\u0440\\u0440\\u0435\\u043a\\u0442\\u0438\\u0440\\u0443\\u0435\\u043c \\u043f\\u043e\\u043b\\u044f \\u0432 \\u0418\\u043d\\u0434\\u0438\\u043a\\u0430\\u0442\\u043e\\u0440\\u0435 \\u0418 \\u043e\\u043f\\u044f\\u0442\\u044c \\u0432 \\u0443\\u043b\\u0443\\u0447\\u0448\\u0435\\u043d\\u043d\\u043e\\u0439 \\u0440\\u0435\\u0430\\u043b\\u0438\\u0437\\u0430\\u0446\\u0438\\u0438 \\u0441 \\u043d\\u0430\\u0441\\u0435\\u043b\\u0435\\u043d\\u0438\\u0435\\u043c, \\u0412\\u0412\\u041f, \\u0441\\u0442\\u043e\\u043b\\u0438\\u0446\\u044b \\u0438 \\u044d\\u043c\\u043e\\u0434\\u0437\\u0438 \\u0444\\u043b\\u0430\\u0433\\u0430 \\u043c\\u044b \\u0438\\u043c\\u0435\\u0435\\u043c \\u041d\\u0415\\u0412\\u0415\\u0420\\u041d\\u042b\\u0419 \\u043a\\u043e\\u0434 \\u0434\\u043b\\u044f ResponseMetadata struct ResponseMetadata: Decodable { let page: Int let pages: Int\",\"inLanguage\":\"ru-RU\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-deepseek-%d0%bf%d1%80%d0%b8-%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%b8%d0%b8-ios-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6-2\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/author\\\/tatiana-lornilovagmail-com\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/author\\\/tatiana-lornilovagmail-com\\\/#author\"},\"datePublished\":\"2025-02-16T15:31:36+00:00\",\"dateModified\":\"2025-02-24T13:23:12+00:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/#website\",\"url\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/\",\"name\":\"\\u041e\\u0431\\u0443\\u0447\\u0430\\u044e\\u0449\\u0438\\u0439 \\u043a\\u0443\\u0440\\u0441 \\u043f\\u043e \\u0440\\u0430\\u0437\\u0440\\u0430\\u0431\\u043e\\u0442\\u043a\\u0435 iOS+Swift \\u043f\\u0440\\u0438\\u043b\\u043e\\u0436\\u0435\\u043d\\u0438\\u0439.\",\"description\":\"\\u0420\\u0443\\u0441\\u0441\\u043a\\u0438\\u0439 \\u043d\\u0435\\u0430\\u0432\\u0442\\u043e\\u0440\\u0438\\u0437\\u043e\\u0432\\u0430\\u043d\\u043d\\u044b\\u0439 \\u043a\\u043e\\u043d\\u0441\\u043f\\u0435\\u043a\\u0442 \\u043b\\u0435\\u043a\\u0446\\u0438\\u0439 \\u0421\\u0442\\u044d\\u043d\\u0444\\u043e\\u0440\\u0434\\u0441\\u043a\\u043e\\u0433\\u043e \\u0443\\u043d\\u0438\\u0432\\u0435\\u0440\\u0441\\u0438\\u0442\\u0435\\u0442\\u0430 \\\" \\u0420\\u0430\\u0437\\u0440\\u0430\\u0431\\u043e\\u0442\\u043a\\u0430 iOS \\u043f\\u0440\\u0438\\u043b\\u043e\\u0436\\u0435\\u043d\\u0438\\u0439\\\" 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 , 2023,  2024,  2025  \\u0438 2026 \\u0433\\u0433., \\u0441\\u043e\\u043f\\u0440\\u043e\\u0432\\u043e\\u0436\\u0434\\u0430\\u0435\\u043c\\u044b\\u0439 \\u0440\\u0435\\u0448\\u0435\\u043d\\u0438\\u044f\\u043c\\u0438 \\u0437\\u0430\\u0434\\u0430\\u043d\\u0438\\u0439 \\u0438 \\u0434\\u043e\\u043f\\u043e\\u043b\\u043d\\u0435\\u043d\\u0438\\u044f\\u043c\\u0438, \\u0441\\u0432\\u044f\\u0437\\u0430\\u043d\\u043d\\u044b\\u043c\\u0438 \\u0441 \\u0430\\u0434\\u0430\\u043f\\u0442\\u0430\\u0446\\u0438\\u0435\\u0439 \\u043a\\u0443\\u0440\\u0441\\u043e\\u0432 \\u043a \\u043d\\u043e\\u0432\\u044b\\u043c \\u0432\\u0435\\u0440\\u0441\\u0438\\u044f\\u043c Swift, Objective-C \\u0438 iOS.\",\"inLanguage\":\"ru-RU\",\"publisher\":{\"@id\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/#person\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 DeepSeek \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f Countries \u0421\u0442\u0440\u0430\u043d\u044b \u041c\u0438\u0440\u0430. \u0427\u0430\u0441\u0442\u044c 2. \u0427\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u0441\u0435\u043b\u0435\u043d\u0438\u044f, \u0412\u0412\u041f, \u0444\u043b\u0430\u0433. | \u041e\u0431\u0443\u0447\u0430\u044e\u0449\u0438\u0439 \u043a\u0443\u0440\u0441 \u043f\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 iOS+Swift \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439.","description":"\u042d\u0442\u043e \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0435. \u041d\u0430\u0447\u0430\u043b\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043f\u043e\u0441\u0442\u0435 \"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 DeepSeek \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f Countries \u0421\u0442\u0440\u0430\u043d\u044b \u041c\u0438\u0440\u0430. \u0427\u0430\u0441\u0442\u044c 1. \u0421\u043f\u0438\u0441\u043e\u043a \u0441\u0442\u0440\u0430\u043d.\". \u041a\u043e\u0434 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430 Github. \u041a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0440\u0443\u0435\u043c \u043f\u043e\u043b\u044f \u0432 \u0418\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0435 \u0418 \u043e\u043f\u044f\u0442\u044c \u0432 \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441 \u043d\u0430\u0441\u0435\u043b\u0435\u043d\u0438\u0435\u043c, \u0412\u0412\u041f, \u0441\u0442\u043e\u043b\u0438\u0446\u044b \u0438 \u044d\u043c\u043e\u0434\u0437\u0438 \u0444\u043b\u0430\u0433\u0430 \u043c\u044b \u0438\u043c\u0435\u0435\u043c \u041d\u0415\u0412\u0415\u0420\u041d\u042b\u0419 \u043a\u043e\u0434 \u0434\u043b\u044f ResponseMetadata struct ResponseMetadata: Decodable { let page: Int let pages: Int","canonical_url":"https:\/\/bestkora.com\/IosDeveloper\/%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-deepseek-%d0%bf%d1%80%d0%b8-%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%b8%d0%b8-ios-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6-2\/","robots":"max-snippet:-1, max-image-preview:large, max-video-preview:-1","keywords":"swift concurrency","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/bestkora.com\/IosDeveloper\/%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-deepseek-%d0%bf%d1%80%d0%b8-%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%b8%d0%b8-ios-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6-2\/#article","name":"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 DeepSeek \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f Countries \u0421\u0442\u0440\u0430\u043d\u044b \u041c\u0438\u0440\u0430. \u0427\u0430\u0441\u0442\u044c 2. \u0427\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u0441\u0435\u043b\u0435\u043d\u0438\u044f, \u0412\u0412\u041f, \u0444\u043b\u0430\u0433. | \u041e\u0431\u0443\u0447\u0430\u044e\u0449\u0438\u0439 \u043a\u0443\u0440\u0441 \u043f\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 iOS+Swift \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439.","headline":"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 DeepSeek \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f Countries \u0421\u0442\u0440\u0430\u043d\u044b \u041c\u0438\u0440\u0430. \u0427\u0430\u0441\u0442\u044c 2. \u0427\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u0441\u0435\u043b\u0435\u043d\u0438\u044f, \u0412\u0412\u041f, \u0444\u043b\u0430\u0433.","author":{"@id":"https:\/\/bestkora.com\/IosDeveloper\/author\/tatiana-lornilovagmail-com\/#author"},"publisher":{"@id":"https:\/\/bestkora.com\/IosDeveloper\/#person"},"image":{"@type":"ImageObject","url":"https:\/\/lh7-rt.googleusercontent.com\/docsz\/AD_4nXfLfuNbNxfsydGqU2aq-9tugy6B8wC7fkwJaBCxu-7keUh4S9Dd0wgdgFW7xfOBt78-08Fh2hLwKipajzQqMmRuhO7BpLx_vlOVHlWe-g9_P4-KNwTwoNMKgtbKZTmQGeHBvfZ-nA?key=jZ3H_Ic4-xgqXIV3TW-rCUlR","@id":"https:\/\/bestkora.com\/IosDeveloper\/%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-deepseek-%d0%bf%d1%80%d0%b8-%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%b8%d0%b8-ios-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6-2\/#articleImage"},"datePublished":"2025-02-16T15:31:36+00:00","dateModified":"2025-02-24T13:23:12+00:00","inLanguage":"ru-RU","mainEntityOfPage":{"@id":"https:\/\/bestkora.com\/IosDeveloper\/%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-deepseek-%d0%bf%d1%80%d0%b8-%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%b8%d0%b8-ios-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6-2\/#webpage"},"isPartOf":{"@id":"https:\/\/bestkora.com\/IosDeveloper\/%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-deepseek-%d0%bf%d1%80%d0%b8-%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%b8%d0%b8-ios-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6-2\/#webpage"},"articleSection":"AI, Concurrency, DeepSeek, Swift 6, SwiftUI, \u0418\u0418, Concurrency, Swift, SwiftUI, \u0418\u0418 DeepSeek"},{"@type":"BreadcrumbList","@id":"https:\/\/bestkora.com\/IosDeveloper\/%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-deepseek-%d0%bf%d1%80%d0%b8-%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%b8%d0%b8-ios-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6-2\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/bestkora.com\/IosDeveloper#listItem","position":1,"name":"Home","item":"https:\/\/bestkora.com\/IosDeveloper","nextItem":{"@type":"ListItem","@id":"https:\/\/bestkora.com\/IosDeveloper\/category\/swiftui\/#listItem","name":"SwiftUI"}},{"@type":"ListItem","@id":"https:\/\/bestkora.com\/IosDeveloper\/category\/swiftui\/#listItem","position":2,"name":"SwiftUI","item":"https:\/\/bestkora.com\/IosDeveloper\/category\/swiftui\/","nextItem":{"@type":"ListItem","@id":"https:\/\/bestkora.com\/IosDeveloper\/%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-deepseek-%d0%bf%d1%80%d0%b8-%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%b8%d0%b8-ios-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6-2\/#listItem","name":"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 DeepSeek \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f Countries \u0421\u0442\u0440\u0430\u043d\u044b \u041c\u0438\u0440\u0430. \u0427\u0430\u0441\u0442\u044c 2. \u0427\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u0441\u0435\u043b\u0435\u043d\u0438\u044f, \u0412\u0412\u041f, \u0444\u043b\u0430\u0433."},"previousItem":{"@type":"ListItem","@id":"https:\/\/bestkora.com\/IosDeveloper#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/bestkora.com\/IosDeveloper\/%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-deepseek-%d0%bf%d1%80%d0%b8-%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%b8%d0%b8-ios-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6-2\/#listItem","position":3,"name":"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 DeepSeek \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f Countries \u0421\u0442\u0440\u0430\u043d\u044b \u041c\u0438\u0440\u0430. \u0427\u0430\u0441\u0442\u044c 2. \u0427\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u0441\u0435\u043b\u0435\u043d\u0438\u044f, \u0412\u0412\u041f, \u0444\u043b\u0430\u0433.","previousItem":{"@type":"ListItem","@id":"https:\/\/bestkora.com\/IosDeveloper\/category\/swiftui\/#listItem","name":"SwiftUI"}}]},{"@type":"Person","@id":"https:\/\/bestkora.com\/IosDeveloper\/#person","name":"tatiana.kornilova@gmail.com","image":{"@type":"ImageObject","@id":"https:\/\/bestkora.com\/IosDeveloper\/%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-deepseek-%d0%bf%d1%80%d0%b8-%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%b8%d0%b8-ios-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6-2\/#personImage","url":"https:\/\/secure.gravatar.com\/avatar\/33ccc19059014d8a7849c3621afa2b66a5f3e50ac7291c91c30ff35df5747628?s=96&d=mm&r=g","width":96,"height":96,"caption":"tatiana.kornilova@gmail.com"}},{"@type":"Person","@id":"https:\/\/bestkora.com\/IosDeveloper\/author\/tatiana-lornilovagmail-com\/#author","url":"https:\/\/bestkora.com\/IosDeveloper\/author\/tatiana-lornilovagmail-com\/","name":"tatiana.kornilova@gmail.com","image":{"@type":"ImageObject","@id":"https:\/\/bestkora.com\/IosDeveloper\/%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-deepseek-%d0%bf%d1%80%d0%b8-%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%b8%d0%b8-ios-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6-2\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/33ccc19059014d8a7849c3621afa2b66a5f3e50ac7291c91c30ff35df5747628?s=96&d=mm&r=g","width":96,"height":96,"caption":"tatiana.kornilova@gmail.com"}},{"@type":"WebPage","@id":"https:\/\/bestkora.com\/IosDeveloper\/%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-deepseek-%d0%bf%d1%80%d0%b8-%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%b8%d0%b8-ios-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6-2\/#webpage","url":"https:\/\/bestkora.com\/IosDeveloper\/%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-deepseek-%d0%bf%d1%80%d0%b8-%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%b8%d0%b8-ios-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6-2\/","name":"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 DeepSeek \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f Countries \u0421\u0442\u0440\u0430\u043d\u044b \u041c\u0438\u0440\u0430. \u0427\u0430\u0441\u0442\u044c 2. \u0427\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u0441\u0435\u043b\u0435\u043d\u0438\u044f, \u0412\u0412\u041f, \u0444\u043b\u0430\u0433. | \u041e\u0431\u0443\u0447\u0430\u044e\u0449\u0438\u0439 \u043a\u0443\u0440\u0441 \u043f\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 iOS+Swift \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439.","description":"\u042d\u0442\u043e \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0435. \u041d\u0430\u0447\u0430\u043b\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043f\u043e\u0441\u0442\u0435 \"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 DeepSeek \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f Countries \u0421\u0442\u0440\u0430\u043d\u044b \u041c\u0438\u0440\u0430. \u0427\u0430\u0441\u0442\u044c 1. \u0421\u043f\u0438\u0441\u043e\u043a \u0441\u0442\u0440\u0430\u043d.\". \u041a\u043e\u0434 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430 Github. \u041a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0440\u0443\u0435\u043c \u043f\u043e\u043b\u044f \u0432 \u0418\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0435 \u0418 \u043e\u043f\u044f\u0442\u044c \u0432 \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441 \u043d\u0430\u0441\u0435\u043b\u0435\u043d\u0438\u0435\u043c, \u0412\u0412\u041f, \u0441\u0442\u043e\u043b\u0438\u0446\u044b \u0438 \u044d\u043c\u043e\u0434\u0437\u0438 \u0444\u043b\u0430\u0433\u0430 \u043c\u044b \u0438\u043c\u0435\u0435\u043c \u041d\u0415\u0412\u0415\u0420\u041d\u042b\u0419 \u043a\u043e\u0434 \u0434\u043b\u044f ResponseMetadata struct ResponseMetadata: Decodable { let page: Int let pages: Int","inLanguage":"ru-RU","isPartOf":{"@id":"https:\/\/bestkora.com\/IosDeveloper\/#website"},"breadcrumb":{"@id":"https:\/\/bestkora.com\/IosDeveloper\/%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-deepseek-%d0%bf%d1%80%d0%b8-%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%b8%d0%b8-ios-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6-2\/#breadcrumblist"},"author":{"@id":"https:\/\/bestkora.com\/IosDeveloper\/author\/tatiana-lornilovagmail-com\/#author"},"creator":{"@id":"https:\/\/bestkora.com\/IosDeveloper\/author\/tatiana-lornilovagmail-com\/#author"},"datePublished":"2025-02-16T15:31:36+00:00","dateModified":"2025-02-24T13:23:12+00:00"},{"@type":"WebSite","@id":"https:\/\/bestkora.com\/IosDeveloper\/#website","url":"https:\/\/bestkora.com\/IosDeveloper\/","name":"\u041e\u0431\u0443\u0447\u0430\u044e\u0449\u0438\u0439 \u043a\u0443\u0440\u0441 \u043f\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 iOS+Swift \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439.","description":"\u0420\u0443\u0441\u0441\u043a\u0438\u0439 \u043d\u0435\u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u043d\u0441\u043f\u0435\u043a\u0442 \u043b\u0435\u043a\u0446\u0438\u0439 \u0421\u0442\u044d\u043d\u0444\u043e\u0440\u0434\u0441\u043a\u043e\u0433\u043e \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0430 \" \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439\" 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 , 2023,  2024,  2025  \u0438 2026 \u0433\u0433., \u0441\u043e\u043f\u0440\u043e\u0432\u043e\u0436\u0434\u0430\u0435\u043c\u044b\u0439 \u0440\u0435\u0448\u0435\u043d\u0438\u044f\u043c\u0438 \u0437\u0430\u0434\u0430\u043d\u0438\u0439 \u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f\u043c\u0438, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u043c\u0438 \u0441 \u0430\u0434\u0430\u043f\u0442\u0430\u0446\u0438\u0435\u0439 \u043a\u0443\u0440\u0441\u043e\u0432 \u043a \u043d\u043e\u0432\u044b\u043c \u0432\u0435\u0440\u0441\u0438\u044f\u043c Swift, Objective-C \u0438 iOS.","inLanguage":"ru-RU","publisher":{"@id":"https:\/\/bestkora.com\/IosDeveloper\/#person"}}]},"og:locale":"ru_RU","og:site_name":"\u041e\u0431\u0443\u0447\u0430\u044e\u0449\u0438\u0439 \u043a\u0443\u0440\u0441 \u043f\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 iOS+Swift \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439. | \u0420\u0443\u0441\u0441\u043a\u0438\u0439 \u043d\u0435\u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u043d\u0441\u043f\u0435\u043a\u0442 \u043b\u0435\u043a\u0446\u0438\u0439 \u0421\u0442\u044d\u043d\u0444\u043e\u0440\u0434\u0441\u043a\u043e\u0433\u043e \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0430 &quot; \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439&quot; 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 , 2023,  2024,  2025  \u0438 2026 \u0433\u0433., \u0441\u043e\u043f\u0440\u043e\u0432\u043e\u0436\u0434\u0430\u0435\u043c\u044b\u0439 \u0440\u0435\u0448\u0435\u043d\u0438\u044f\u043c\u0438 \u0437\u0430\u0434\u0430\u043d\u0438\u0439 \u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f\u043c\u0438, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u043c\u0438 \u0441 \u0430\u0434\u0430\u043f\u0442\u0430\u0446\u0438\u0435\u0439 \u043a\u0443\u0440\u0441\u043e\u0432 \u043a \u043d\u043e\u0432\u044b\u043c \u0432\u0435\u0440\u0441\u0438\u044f\u043c Swift, Objective-C \u0438 iOS.","og:type":"article","og:title":"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 DeepSeek \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f Countries \u0421\u0442\u0440\u0430\u043d\u044b \u041c\u0438\u0440\u0430. \u0427\u0430\u0441\u0442\u044c 2. \u0427\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u0441\u0435\u043b\u0435\u043d\u0438\u044f, \u0412\u0412\u041f, \u0444\u043b\u0430\u0433. | \u041e\u0431\u0443\u0447\u0430\u044e\u0449\u0438\u0439 \u043a\u0443\u0440\u0441 \u043f\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 iOS+Swift \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439.","og:description":"\u042d\u0442\u043e \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0435. \u041d\u0430\u0447\u0430\u043b\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043f\u043e\u0441\u0442\u0435 &quot;\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 DeepSeek \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f Countries \u0421\u0442\u0440\u0430\u043d\u044b \u041c\u0438\u0440\u0430. \u0427\u0430\u0441\u0442\u044c 1. \u0421\u043f\u0438\u0441\u043e\u043a \u0441\u0442\u0440\u0430\u043d.&quot;. \u041a\u043e\u0434 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430 Github. \u041a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0440\u0443\u0435\u043c \u043f\u043e\u043b\u044f \u0432 \u0418\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0435 \u0418 \u043e\u043f\u044f\u0442\u044c \u0432 \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441 \u043d\u0430\u0441\u0435\u043b\u0435\u043d\u0438\u0435\u043c, \u0412\u0412\u041f, \u0441\u0442\u043e\u043b\u0438\u0446\u044b \u0438 \u044d\u043c\u043e\u0434\u0437\u0438 \u0444\u043b\u0430\u0433\u0430 \u043c\u044b \u0438\u043c\u0435\u0435\u043c \u041d\u0415\u0412\u0415\u0420\u041d\u042b\u0419 \u043a\u043e\u0434 \u0434\u043b\u044f ResponseMetadata struct ResponseMetadata: Decodable { let page: Int let pages: Int","og:url":"https:\/\/bestkora.com\/IosDeveloper\/%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-deepseek-%d0%bf%d1%80%d0%b8-%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%b8%d0%b8-ios-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6-2\/","article:published_time":"2025-02-16T15:31:36+00:00","article:modified_time":"2025-02-24T13:23:12+00:00","twitter:card":"summary","twitter:title":"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 DeepSeek \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f Countries \u0421\u0442\u0440\u0430\u043d\u044b \u041c\u0438\u0440\u0430. \u0427\u0430\u0441\u0442\u044c 2. \u0427\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u0441\u0435\u043b\u0435\u043d\u0438\u044f, \u0412\u0412\u041f, \u0444\u043b\u0430\u0433. | \u041e\u0431\u0443\u0447\u0430\u044e\u0449\u0438\u0439 \u043a\u0443\u0440\u0441 \u043f\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 iOS+Swift \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439.","twitter:description":"\u042d\u0442\u043e \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0435. \u041d\u0430\u0447\u0430\u043b\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043f\u043e\u0441\u0442\u0435 &quot;\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 DeepSeek \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f Countries \u0421\u0442\u0440\u0430\u043d\u044b \u041c\u0438\u0440\u0430. \u0427\u0430\u0441\u0442\u044c 1. \u0421\u043f\u0438\u0441\u043e\u043a \u0441\u0442\u0440\u0430\u043d.&quot;. \u041a\u043e\u0434 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430 Github. \u041a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0440\u0443\u0435\u043c \u043f\u043e\u043b\u044f \u0432 \u0418\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0435 \u0418 \u043e\u043f\u044f\u0442\u044c \u0432 \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441 \u043d\u0430\u0441\u0435\u043b\u0435\u043d\u0438\u0435\u043c, \u0412\u0412\u041f, \u0441\u0442\u043e\u043b\u0438\u0446\u044b \u0438 \u044d\u043c\u043e\u0434\u0437\u0438 \u0444\u043b\u0430\u0433\u0430 \u043c\u044b \u0438\u043c\u0435\u0435\u043c \u041d\u0415\u0412\u0415\u0420\u041d\u042b\u0419 \u043a\u043e\u0434 \u0434\u043b\u044f ResponseMetadata struct ResponseMetadata: Decodable { let page: Int let pages: Int"},"aioseo_meta_data":{"post_id":"16637","title":null,"description":null,"keywords":[{"label":"Swift Concurrency","value":"Swift Concurrency"}],"keyphrases":{"focus":{"keyphrase":"","score":0,"analysis":{"keyphraseInTitle":{"score":0,"maxScore":9,"error":1}}},"additional":[]},"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":"","og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"Article","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":"-1","robots_max_videopreview":"-1","robots_max_imagepreview":"large","priority":null,"frequency":"default","local_seo":null,"breadcrumb_settings":null,"limit_modified_date":false,"ai":null,"created":"2025-02-16 15:24:47","updated":"2026-02-22 19:43:33","seo_analyzer_scan_date":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/bestkora.com\/IosDeveloper\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/bestkora.com\/IosDeveloper\/category\/swiftui\/\" title=\"SwiftUI\">SwiftUI<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 DeepSeek \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f Countries \u0421\u0442\u0440\u0430\u043d\u044b \u041c\u0438\u0440\u0430. \u0427\u0430\u0441\u0442\u044c 2. \u0427\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u0441\u0435\u043b\u0435\u043d\u0438\u044f, \u0412\u0412\u041f, \u0444\u043b\u0430\u0433.\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/bestkora.com\/IosDeveloper"},{"label":"SwiftUI","link":"https:\/\/bestkora.com\/IosDeveloper\/category\/swiftui\/"},{"label":"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 DeepSeek \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f Countries \u0421\u0442\u0440\u0430\u043d\u044b \u041c\u0438\u0440\u0430. \u0427\u0430\u0441\u0442\u044c 2. \u0427\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u0441\u0435\u043b\u0435\u043d\u0438\u044f, \u0412\u0412\u041f, \u0444\u043b\u0430\u0433.","link":"https:\/\/bestkora.com\/IosDeveloper\/%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-deepseek-%d0%bf%d1%80%d0%b8-%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%b8%d0%b8-ios-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6-2\/"}],"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/bestkora.com\/IosDeveloper\/wp-json\/wp\/v2\/posts\/16637","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bestkora.com\/IosDeveloper\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/bestkora.com\/IosDeveloper\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/bestkora.com\/IosDeveloper\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/bestkora.com\/IosDeveloper\/wp-json\/wp\/v2\/comments?post=16637"}],"version-history":[{"count":4,"href":"https:\/\/bestkora.com\/IosDeveloper\/wp-json\/wp\/v2\/posts\/16637\/revisions"}],"predecessor-version":[{"id":16788,"href":"https:\/\/bestkora.com\/IosDeveloper\/wp-json\/wp\/v2\/posts\/16637\/revisions\/16788"}],"wp:attachment":[{"href":"https:\/\/bestkora.com\/IosDeveloper\/wp-json\/wp\/v2\/media?parent=16637"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bestkora.com\/IosDeveloper\/wp-json\/wp\/v2\/categories?post=16637"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bestkora.com\/IosDeveloper\/wp-json\/wp\/v2\/tags?post=16637"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}