<?xml version="1.0" encoding="utf-8" ?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:tt="http://teletype.in/" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/"><title>Alexey Efimov</title><author><name>Alexey Efimov</name></author><id>https://teletype.in/atom/debash</id><link rel="self" type="application/atom+xml" href="https://teletype.in/atom/debash?offset=0"></link><link rel="alternate" type="text/html" href="https://teletype.in/@debash?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=debash"></link><link rel="next" type="application/rss+xml" href="https://teletype.in/atom/debash?offset=10"></link><link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></link><updated>2026-04-15T12:24:32.653Z</updated><entry><id>debash:N47sSnZp6</id><link rel="alternate" type="text/html" href="https://teletype.in/@debash/N47sSnZp6?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=debash"></link><title>Оформление и структура класса</title><published>2021-01-24T17:41:08.392Z</published><updated>2021-01-25T11:42:57.022Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://teletype.in/files/32/49/32491e14-dd4f-4a61-814b-569a6716b0e5.png"></media:thumbnail><category term="zametki-na-polyah" label="Заметки на полях"></category><summary type="html">&lt;img src=&quot;https://teletype.in/files/11/57/1157e7e2-0640-4f81-90ad-59f82ff6d562.png&quot;&gt;Читаемость кода является важным аспектом в программировании и поэтому существуют определенные стандарты, как в написании кода, так и в оформлении классов. Особенно это касается вью контроллеров, которые сами по себе являются довольно массивными объектами и поэтому навигация по ним должна быть предсказуемой, в не зависимости от того работаете ли вы со своим проектом или же со сторонним. </summary><content type="html">
  &lt;h3&gt;В какой последовательности должны объявляться свойства и методы класса?&lt;/h3&gt;
  &lt;h2&gt;Введение&lt;/h2&gt;
  &lt;p&gt;Читаемость кода является важным аспектом в программировании и поэтому существуют определенные стандарты, как в написании кода, так и в оформлении классов. Особенно это касается вью контроллеров, которые сами по себе являются довольно массивными объектами и поэтому навигация по ним должна быть предсказуемой, в не зависимости от того работаете ли вы со своим проектом или же со сторонним. &lt;/p&gt;
  &lt;p&gt;В этой не большой заметке я хочу расписать основные аспекты правильного оформления классов, что бы навигация по ним была интуитивно понятной, как для вас, так и для стороннего наблюдателя.&lt;/p&gt;
  &lt;h2&gt;Структура класса&lt;/h2&gt;
  &lt;p&gt;Класс начинается со свойств к которым относятся аутлеты, а также публичные и приватные переменные и константы:&lt;/p&gt;
  &lt;figure class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://teletype.in/files/11/57/1157e7e2-0640-4f81-90ad-59f82ff6d562.png&quot; width=&quot;2042&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;Обратите внимание в какой последовательности объявлены свойства: сначала объявляются аутлеты, затем публичные переменные и константы, после которых уже идут приватные свойства. Так же обратите внимание на то, что аутлеты для лейблов разделяет пустая строка от аутлетов для текстовых полей. Такие разделители в виде пустых строк помогают визуально отделить логические блоки кода друг от друга, что повышает читаемость кода. Не пренебрегайте ими, но и не злоупотребляйте. Достаточно одной пустой строки, что бы отделить одно от другого. &lt;/p&gt;
  &lt;p&gt;При помощи пометки &lt;code&gt;// MARK: &lt;/code&gt; класс можно поделить на разделы. Эти пометки играют роль заголовков, по которым можно быстро перемещаться. У каждого файла в проекте есть содержание, открыть которое можно, кликнув на название класса в верхней строке в которой прописан путь до класса:&lt;/p&gt;
  &lt;figure class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://teletype.in/files/8b/87/8b878d41-4d72-43f8-94d3-b80b68adc8e2.png&quot; width=&quot;380&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;В этом списке отображаются все свойства и методы класса, а заголовки позволяют легче ориентироваться во всему содержимому и перемещаться в нужно место в один клик.&lt;/p&gt;
  &lt;p&gt;В том случае, если класс не является вью контроллером, то после свойств класса объявляются инициализаторы, если в них есть необходимость:&lt;/p&gt;
  &lt;figure class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://teletype.in/files/2d/3f/2d3ff7d7-3008-47a8-9844-0768ba320237.png&quot; width=&quot;2050&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;После инициализаторов объявляются переопределенные методы родительского класса. Это те методы, которые помечены ключевым словом &lt;code&gt;override&lt;/code&gt;. Если же вы работаете с вью контроллером, то переопределенные методы идут сразу после свойств класса:&lt;/p&gt;
  &lt;figure class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://teletype.in/files/c6/9e/c69e4c19-9924-451f-873f-63e37499d1c1.png&quot; width=&quot;2044&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;После переопределенных методов объявляются IB Actions, т.е. методы связанные с пользовательским интерфейсом:&lt;/p&gt;
  &lt;figure class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://teletype.in/files/13/5c/135c27c1-b86a-4e56-813f-e7d571fdd717.png&quot; width=&quot;2046&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;Далее идут методы экземпляра класса. Это публичные методы, которые можно вызвать из экземпляра:&lt;/p&gt;
  &lt;figure class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://teletype.in/files/45/1e/451eeeb2-79d3-4830-bd23-ab076bf39fed.png&quot; width=&quot;2048&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;И в самом конце класса объявляются приватные методы. Это те методы, которые используются исключительно внутри самого класса и не должны вызываться из экземпляра:&lt;/p&gt;
  &lt;figure class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://teletype.in/files/c5/5c/c55c1078-de87-493e-a186-fdf1e9028939.png&quot; width=&quot;2048&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;Так же классы могу иметь расширения или &lt;code&gt;extensions&lt;/code&gt;. В них можно подписывать класс под протоколы и реализовывать методы эти протоколов , что бы все они были собраны в одном месте:&lt;/p&gt;
  &lt;figure class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://teletype.in/files/f6/fc/f6fcac13-6157-4eef-ad52-4d0949da7bb6.png&quot; width=&quot;2622&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;Так же можно делать расширения для приватных методов или, например для методов, которые позволяют работать с клавиатурой. Т.е. при помощи расширений можно агрегировать методы со схожими задачами. Кроме того расширения полезно использовать для распределения обязанностей между командой. В этом случае для каждого расширения создается отдельный файл, что позволяет работать над одним классом сразу нескольким участникам проекта.&lt;/p&gt;
  &lt;p&gt;В итоге структура класса должна выглядеть следующим образом:&lt;/p&gt;
  &lt;figure class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://teletype.in/files/9a/39/9a39d236-f84e-406d-8e79-aa1516243c9a.png&quot; width=&quot;2040&quot; /&gt;
  &lt;/figure&gt;
  &lt;h2&gt;Общие советы&lt;/h2&gt;
  &lt;ul&gt;
    &lt;li&gt;Не храните в классе методы, которые ни как не используются. Т.е. если у вас есть метод &lt;code&gt;viewDidLoad()&lt;/code&gt;, но при этом он пустой, то смело его удаляйте. Ни чего лишнего в коде быть не должно.&lt;/li&gt;
    &lt;li&gt;Удаляйте все шаблонные комментарии, которые достаются вам &amp;quot;из коробки&amp;quot; при добавлении новых классов.&lt;/li&gt;
    &lt;li&gt;Используйте в качестве разделителей логических блоков кода пустые строки, но не более одной.&lt;/li&gt;
    &lt;li&gt;Названия классов должны быть емкими и отражать их суть. В проекте не должно быть классов с именем &amp;#x60;V&lt;code&gt;ViewController&lt;/code&gt;Не сокращайте имена классов.  В проекте не должно быть классов с именем &lt;code&gt;MainVC&lt;/code&gt;.  &lt;/li&gt;
  &lt;/ul&gt;

</content></entry></feed>