Если вы хоть немного пересекались с Machine Learning, то понимаете, что человеческий мозг — это, по сути, большая нейросеть. А раз так, то и работу с ним можно строить по известным в ML алгоритмам. Так я нашел универсальный способ выучить любой иностранный язык до нормального уровня в разумные сроки. И на себе проверил его эффективность.
Пользователь
Тестирование StoreKit в Xcode 12 и iOS 14
Привет, Хабр!
Меня зовут Сэм, я разработчик в сервисе Qonversion. В этой статье описаны новые возможности для тестирования подписок, представленные Apple во время сессии Introducing StoreKit Testing in Xcode на WWDC 2020.
Рынок подписок в мобильных приложениях быстро растет, но набор инструментов тестирования до iOS 14 был скудным. Вдобавок всё усложнялось нестабильностью песочницы Apple.
Нововведения в Xcode 12 и iOS 14 сильно меняют ситуацию.
Разбор архитектуры VIPER на примере небольшого iOS приложения на Swift 4
«У каждого свой VIPER». Автор неизвестенВ данной статье я хотел бы рассмотреть архитектуру VIPER на небольшом конкретном примере, который в того же время показывал всю мощь этой архитектуры и был написан на последнем Swift 4. Для тех, кто хочет сразу глянуть код, не читая всю статью, ссылка на реп в самом низу.
RxSwift: работа с GUI
Моя первая статья по RxSwift покрывала практически все базовые операторы, без знаний которых соваться в разработку не имело особого смысла. Но это всего лишь алфавит функционального программирования. Для того чтобы писать полноценные программы необходимо понять основные принципы при работе с GUI.
В основном для проработки материала используются стандартные примеры из RxExample, но для прояснения отдельных моментов была создана песочница UIExplanation и дополнительный пример в RxExample
Весь код можно найти здесь github.com/sparklone/RxSwift
При работе с UI элементами в Rx есть основные потребности:
1) понять какие подводные камни нас ожидают в принципе и зачем нужен Driver
2) научиться делать привязку UI к Observable, чтобы элементы Observable меняли состояние свойства/свойств UI элемента. Это решается с помощью UIBindingObserver
3) научиться переводить паттерн target-action на рельсы Rx. Это делается с помощью ControlEvent
4) сделать двустороннюю привязку к свойствам UI элемента. Это делается с помощью ControlProperty
5) т.к. зачастую у UI элементов delegate/dataSource предполагаются в единственном числе, — ввели класс DelegateProxy, который позволяет одновременно использовать как обычный делегат, так и Rx последовательности.
Рассмотрим каждую потребность отдельно
RxSwift часть 1
Доброго времени суток, хабровчане. В этом цикле статей, я бы хотел рассказать о реактивном программировании, а именно о фреймворке
RxSwift. На Хабре и в сети были статьи по RxSwift, но, на мой взгляд, они слишком трудны для начинающих. Поэтому, если вы начинаете постигать реактивное программирование в iOS, то прошу под кат.
Общее представление об архитектуре Clean Swift
В этой статье я расскажу об архитектуре iOS приложений — Clean Swift. Мы рассмотрим основные теоретические моменты и разберем пример на практике.
Clean swift архитектура как альтернатива VIPER
Введение
На данный момент существует множество статей про VIPER — clean архитектуру, различные вариации которой в свое время стали популярны для iOS проектов. Если вы не знакомы с Viper, можете прочитать тут, тут или тут.
Я бы хотел поговорить об альтернативе VIPER — Clean Swift. Сlean Swift на первый взгляд похож на VIPER, однако отличия становятся видны после изучения принципа взаимодействия модулей. В VIPER основу взаимодействия составляет Presenter, он передает запросы пользователя Interactor’у для обработки и форматирует полученные от него назад данные для отображения на View Controller:
Поднимаем читаемость кода в iOS разработке
Представили?
Смогли бы вы понять, о чем книга?
Насколько быстро вы смогли бы найти интересующий вас отрывок?
Ваш код, как и содержание книги, нуждается в структурировании, чтобы код был легко читаемым и передавал заложенный в нем смысл.
В данной статье я покажу примеры по организации кода, в которых классы будут иметь одинаковую последовательность основных блоков и их разбивку.
Для удобства я буду использовать слово класс (class), но подразумевать любой вид типа (class, struct, enum).
Благодаря применению этих советов ваш код станет читабельным, что в дальнейшем обеспечит удобство и скорость работы с ним.
Идеальное резюме разработчика
Навигация между представлениями с помощью @EnvironmentObject в SwiftUI
Здравствуйте и добро пожаловать на наш туториал! В этой серии мы говорим о том, как перемещаться между представлениями в SwiftUI (без использования навигационного представления!). Хоть эта идея и может казаться тривиальной, но, разобравшись в ней поглубже, мы сможем многое узнать о концепциях потоков данных, используемых в SwiftUI.
В предыдущей части мы узнали, как реализовать это, используя
@ObservableObject
. В этой части мы рассмотрим, как сделать то же самое, но более эффективно, используя @EnvironmentObject. Мы также собираемся добавить небольшую анимацию перехода.Вот чего мы собираемся достичь:
Геймификация личной продуктивности
Предисловие
Думаю, многие встречали статьи по различным методикам увеличения своей продуктивности, но в действительности мало кто придерживается строгой дисциплины и ежедневно выполняет необходимый ToDo план. Я один из таких.
Но так или иначе вопрос личной эффективности меня интересует уже много лет и я всячески экспериментирую в поисках ответа на вопрос "Почему одни люди могут двигаться к цели ежедневно, а другие уже после недели перестают всячеcки придерживаться плана?".
Собственно, эта скромная статья — мое предположение, которое пока работает на всех моих знакомых. Они поддержали и любезно согласились поучаствовать в эксперименте, который длился ровно 30 дней.
Как все начиналось
Еще далекие 5 лет назад я пробовал самые классические подходы — ручка и блокнот, где я ежедневно в виде ToDo списка писал, что мне нужно сделать на день. Обычно планы на будущий день я записывал с вечера, чтобы за ночь мое подсознание подготовилось к продуктивному дню.
Список выглядел примерно так:
- Договориться о встрече с Иваном Петровичем
- Созвониться с заказчиком и обсудить ТЗ
- Дописать модуль АBC
…
И все в таком роде.
Довольно просто и в то же время до жути неудобно. В один день я мог поставить 3 задачи и уже к обеду все закончить, в другой задач было так много, что я не успевал сделать и половины. Не было четкого плана, как их делить, как сортировать по приоритетам и как вообще себя оценивать. Да-да, оценка мне была очень важна, так как человек любит все структурировать.
Важно было через месяц посмотреть на свой результат и сделать определенные выводы. Кроме месячных отчетов о своем прогрессе хотелось банально понимать, какую оценку я получил за текущий день.
Как я уже сказал, из-за того, что задачи не сортировались по приоритетам и по количеству, нельзя просто высчитать процент, так как каждый новый день система отсчета будет меняться и ни о какой абсолютной оценке и речи быть не может.
Немного практики функционального программирования в Swift для начинающих
Я хотела бы представить концепцию Функционального Программирования новичкам самым простейшим образом, выделив некоторые его преимущества из множества остальных, которые реально позволят сделать код более читаемым и выразительным. Я подобрала для вас интересные демонстрационные примеры, которые находятся на
Playground
в Github.Функциональное Программирование: Определение
Прежде всего, Функциональное Программирование — это не язык или синтаксис, а скорее всего — способ решения проблем путем разбиения сложных процессов на более простые и последующей их композиции. Как следует из названия "Функциональное программирование", единицей композиции для данного подхода является функция; и цель такой функции — избежать изменения состояния или значений за пределами своей области действия (
scope)
.В Мире
Swift
для этого есть все условия, ибо функции здесь являются такими же полноправными участниками процесса программирования, как и объекты, а проблема изменяемости (mutation
) решается на уровне концепции value
ТИПОВ (структур struct
и перечислений enum
), которые помогают управлять изменяемостью (mutation
) и четко сообщают о том, как и когда это может произойти.Однако
Swift
не является в полном смысле языком Функционального программирования, он не принуждает вас к Функциональному программированию, хотя и признает преимущества Функциональных подходов и находит способы встраивания их. В этой статье мы сфокусируемся на использовании встроенных в
Swift
(то есть «из коробки») элементов Функционального программирования и понимании того, как можно их комфортно использовать в вашем приложении.LinkedIn для студентов и выпускников: первые шаги
У социальной сети LinkedIn, которая была запущена в мае 2003 года, 590 миллионов пользователей по всему миру. Сайт предназначен для людей, заинтересованных во взаимодействии с профессионалами свой отрасли, поиске работы, деловых контактов и новостей по специальности. В 2016 году сеть была заблокирована в России, но продолжает оставаться самой востребованной площадкой для нетворкинга в зарубежных странах.
Самое подходящее время для запуска профиля LinkedIn — это когда учащийся готов начать свое профессиональное развитие, даже если это небольшая стажировка или неоплачиваемая практика. Рассмотрим, как стать частью LinkedIn для профессионального успеха каждого студента.
Информация
- В рейтинге
- Не участвует
- Зарегистрирован
- Активность