Я глубоко погрузился в «Advanced Swift» Криса Эйдхофа, «RxSwift» команды Рэя Вендерлиха и приступил к работе над своим первым большим экраном приложения.

Advanced Swift позволил мне лучше понять, как работает язык Swift.

Например, вы можете перебирать массивы и словари не потому, что они являются массивами и словарями. Можно выполнять итерацию массивов и словарей, поскольку массивы и словари соответствуют протоколу Последовательность.

Последовательность - серия значений одного типа, позволяющая перебирать значения.

  • наиболее распространенный способ обхода последовательности - цикл for
  • чтобы соответствовать протоколу последовательности, предоставьте метод makeIterator (), который возвращает итератор

Чтобы соответствовать протоколу последовательности, должен быть реализован метод makeIterator, который возвращает итератор.

Итератор - выдает значения последовательности по одному и отслеживает ее состояние итерации при прохождении через последовательность (цикл for).

Конечно, итератор должен соответствовать протоколу итератора.

RxSwift

Читая RxSwift, я понял, что некоторые определения Observables были записаны в README.MD проекта, над которым я работаю. Мораль истории, всегда читайте файл README!

Чтение документации и README.MD особенно важно при участии в большом проекте, потому что это действительно помогло мне понять, где все было и что было в проекте. Сочетание клавиш cmd + click для перехода к определению было бесценным. Если вы еще не настроили Xcode с этим ярлыком, вот ссылка о том, как это сделать:



«Новое в Xcode - 9, как изменить CMD + щелчок для перехода к определению
В новом Xcode 9, когда вы нажимаете что-то по команде, появляется всплывающее окно с опцией например "Перейти к определению", "Показать… medium.com"



У меня есть другие заметки о RxSwift, о которых я, вероятно, сделаю отдельный пост, но на данный момент я отметил несколько моментов о RxSwift:

Наблюдаемые - просто асинхронная последовательность

  • взаимозаменяемо именуются «наблюдаемая», «наблюдаемая последовательность», «последовательность», иногда «поток» (все они означают одно и то же!)
  • Класс Observable ‹T› создает последовательность, которая «несет» снимок данных T
  • Протокол ObservableType может генерировать / получать только 3 типа событий, ничего не предполагает о Observable или Observer

* (Последовательности событий - вот почему делегаты / замыкания не нужны для того, чтобы классы могли общаться друг с другом)

Три типа событий:

  • следующее событие (последнее значение, так наблюдатели получают значения)
  • Завершенное событие (когда Observable успешно завершил свой жизненный цикл, события больше не генерируются)
  • событие ошибки (Observable завершается с ошибкой и не генерирует другие события)

Мой первый большой экран приложения

На этой неделе мне пришлось поработать над экраном приложения, который был намного сложнее, чем экраны, над которыми я работал ранее. Я узнал довольно много интересного.

Давайте создадим сцену, набор UIView внутри представления содержимого внутри scrollView: D

  1. Распознаватели жестов касания в UIView внутри представления содержимого, внутри scrollView никогда не срабатывают, потому что scrollView не взаимодействует с UIView, когда пользователь касается UIView.
  • Чтобы что-то сделать, когда пользователь коснулся UIView, я создал UIButton того же размера, что и UIView, и установил цвет на .clear, чтобы он не был очевиден.
  • Затем я устанавливаю действие UIButton на переход на другой экран.
  • Пожалуйста, поделитесь ниже, если вы знаете более элегантный способ сделать это ~

*** редактировать, вот как вы заставляете работать распознаватель жестов касания

2. Для правильной прокрутки scrollView необходимо, чтобы contentView, содержащий все UIViews, был больше, чем scrollView.

  • Все UIView внутри contentView должны иметь верхнее, ведущее, конечное и собственные ограничения высоты.
  • Нижний UIView внутри contentView должен иметь ограничение снизу.
  • Убедитесь, что самый верхний UIView в contentView прикреплен к верхнему safeAreaLayoutConstraint contentView, а НЕ - к верхнему safeAreaLayoutConstraint самого внешнего представления. Если самый верхний UIView прикреплен к верхнему safeAreaLayoutConstraint самого внешнего View, scrollView не будет прокручиваться вообще. Это немного сбило меня с толку, пока старший инженер iOS не помог мне в процессе отладки этой проблемы. Спасибо, Эрик!

На этой неделе я также получил очень полезные и полезные отзывы от своего менеджера о сферах, в которых я преуспеваю, а также о том, что можно улучшить, а также о том, как я мог бы это улучшить.

Часть "Как" особенно важна, потому что именно она сделала обратную связь действенной. Одной из частей, над которой я работал на этой неделе, была часть чтения документации. На второй неделе я понял, что не очень внимательно прочитал документацию, что затрудняло создание некоторых экранов, потому что я не был уверен во всех типах данных в приложении.

Цитата недели:

Всегда есть решение. - Дэниел Д.

Эту цитату я вспоминал каждый раз, когда сталкивался с ошибкой. До того, как Даниэль (инженер iOS) сказал мне это, я просто чувствовал себя заблокированным.

Но он прав, решение есть всегда. Обычно более одного.

В конце туннеля всегда есть свет.

С нетерпением жду того, что принесет четвертая неделя!

О второй неделе в качестве стажера разработчика iOS читайте здесь

Покажите свою поддержку 👏 аплодисментами ниже, следуйте за мной в моем путешествии разработчика iOS 😊 в Twitter