Я глубоко погрузился в «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
- Распознаватели жестов касания в 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