Как стать автором
Поиск
Написать публикацию
Обновить
9.71

Swift *

Открытый объектно-ориентированный язык

Сначала показывать
Порог рейтинга
Уровень сложности

Создание программно интерфейса. А так же передача объекта между контроллерами

Время на прочтение4 мин
Количество просмотров5.4K

В предыдуще статье мы рассмотрели создание TabBarController и NavigationController программно в UIKit. В данной статье мы продолжим выполнение заданий и рассмотрим пункты 6 и 7. А Bar Button Item и Alert мы оставим на десерт и рассмотрим в следующей статье.

Читать далее

Интерфейсы/протоколы для начинающих

Время на прочтение6 мин
Количество просмотров16K

Сублимация попыток объяснить друзьям чем отличаются классы от протоколов и почему без организации целого концерта здесь никак не обойтись.

Читать далее

Как я Sberfight 2022 проходил на Swift

Время на прочтение8 мин
Количество просмотров4K

В 2021 году на просторах интернета случайно увидел Sber на geecko.com, тогда компания Sber проводила fight типа "староверы" против "новокодеров". (Простите за неточности, вспоминаю по памяти.)

И когда запустили конкурс Sberfight я уже автоматически попал в рассылку.

Я относительно молод в Swift и тренировка умений или же проверка навыков на скорость очень привлекла. А формат в стиле "Денди" поднимает давно забытое чувство детства. (Моей любимой игрой были "танчики", "контра" и "червяк Джим"- правда у друзей на "Сеге".)

Однако, первый неприятный сюрприз ждал в условиях конкурса - подсчет баллов. Оказывается подсчет баллов теперь осуществляется - 100 баллов за задание(при учете, что все тест кейсы положительные) и + за скорость(по формуле где Swift имеет коэффициент примерно 1.29, как и JS, а вот максимальный С# - 2). Всего 8 заданий - значит минимум 800 баллов без надбавок. А вот сколько за скорость? Ответ был найден быстро - только взглянув на турнирную таблицу (Топ-1 - примерно - 3400 баллов). То есть 2400 надбавка за скорость (предположим C# - значит в общем за Swift при таком же идеальном выполнении я получу - 2477 баллов). Тут-то интерес начал угасать.

А, эскиз победителей уже нарисовался.

Пройдя два задания и поняв, что быстрее отведенного времени я не успеваю, а значит надбавки за скорость нет. Я взглянул на обновленный топ и увидев (Топ-1 - 5500 баллов) моей грусти не было предела.

Так и закрыл я Sberfight до конца февраля, пока мне на почту не упало письмо от рекрутера Sber. (Что это была массовая рассылка - это понятно, но зачем за два задания из 8 для меня осталось вопросом.) Но такая напоминалка заинтриговала меня глянуть на лидеров и каким же было мое удивление, когда Топ 1 - стоял 3400 баллов. Понятно, кто-то нашел баг, накрутил себе баллов, а теперь все пофиксили. Вот тут интерес и разогрелся, увы, оставалось два дня.

Читать далее

Unit тесты в Swift (модульное тестирование)

Время на прочтение7 мин
Количество просмотров21K

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

И всё же, зачем нужны тесты?

Опишу самые, на мой взгляд, важные причины:

– при написании тестов вы продумываете все возможные варианты и ситуации, которые могут произайти в приложении, тем самым тестируете все эти подходы и исключаете возможные ошибки на «проде». Как простой пример: функция, выполняющая математическую операцию, должна выдавать определённый результат, но если посчитать руками, то вы обнаруживаете разницу, от которой можно обезопасится тестами 

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

– ну и конечно, это экономия времени в будущем, особенно если ваш проект не маленький, а амбициозный и с долгосрочными планами

Читать далее

Жизненный цикл UIViewController

Время на прочтение7 мин
Количество просмотров41K

Жизненный цикл View Controller – это начинающаяся с создания последовательность шагов. Приходит создание View Controller со storyboard (выставляем view, button) или из кода.

Читать далее

Модуляризация DI в проекте с UDF-архитектурой

Время на прочтение7 мин
Количество просмотров3.1K

Всем привет, меня зовут Юрий Трыков, я Head of Mobile в inDriver. В этой статье расскажу, как в рамках платформенной iOS-команды мы выстраивали модуляризацию DI-контейнеров в проекте, зачем вообще нам нужны DI-контейнеры и как настраивать взаимодействие UDF-компонентов и DI-контейнеров. Приятного чтения!

Читать далее

Ускоряем прохождение iOS UI-тестов. Часть 2. Распараллеливание тестов

Время на прочтение4 мин
Количество просмотров4.7K

Хабр, привет!

Меня зовут Борис. Я Mobile AQA lead в Vivid Money.

Это вторая статья в цикле статей по iOS-автоматизации, в которых я расскажу о том, как ускорить прохождение UI-тестов.

Данная статья будет полезна iOS-автоматизаторам с опытом, либо разработчикам.

В рамках этой статьи мы разберем такие этапы:

- зачем распараллеливать тесты?;

- распараллеливаем тесты, используя Xcode;

- распараллеливаем тесты, используя Fastlane.

Читать далее

Навигация в SwiftUI или NavigationView и его особенности

Время на прочтение5 мин
Количество просмотров22K

Первое с чем вы сталкиваетесь при написании мобильного приложения, это переходы с одного экрана на другой и обратно (в случае простого приложения), а так же многоуровневые переходы и моментальный возврат на первый экран (back to root view). Всё это мы разберём на примерах в данной статье, ну а для начала немного углубимся в теорию.

Что такое NavigationView?

Представьте, что перед вами коробка (NavigationView) в которой много мячиков (View) и эти мячики могут соприкасаться друг с другом (переход с View на View) только в рамках этой коробки. 

Но есть так же и случаи, когда внутри коробки, помимо шариков, есть ещё одна коробка поменьше, которая содержит другие маленькие шарики (история про .sheet и .fullScreenCover - модальные окна). Это так же разберём ниже в статье.

Читать далее

Создание TabBarController и NavigationController программно в UIKit

Время на прочтение8 мин
Количество просмотров16K

В SceneDelegate.swift добавим UITabBarController. Добавим в него два UINavigationController. Первый будет показывать ленту пользователя, а второй — профиль. И все программно!

Изменим Tab Bar Item у добавленных контроллеров, добаим заголовок и картинку.

Создадим FeedViewController и ProfileViewController и добавим их как root view controller у навигационных контроллеров.

Читать далее

Погружение в Combine: последовательные и объединяющие операторы для улучшения процесса разработки iOS приложений

Время на прочтение8 мин
Количество просмотров7.7K

Добрый день! Я — Иваев Зафар, iOS разработчик в компании Usetech. В этой статье мы узнаем как фреймворк Combine помогает нам разрабатывать функционал приложения с помощью встроенных функций — операторов. В этой статье, мы покроем следующие типы операторов:

1. Последовательные операторы

2. Объединяющие операторы

Читать далее

Непростая линковка Swift и C

Время на прочтение10 мин
Количество просмотров3K

И ман по линковке swift и Си библиотек и история одной проблемы - два в одном - чуть не дотягивает до кофе от нескафе!

Читать далее

Модуляризация доменного слоя в UDF. Часть II

Время на прочтение12 мин
Количество просмотров2.4K

В предыдущей части мы рассмотрели, что такое домен и какими принципами можно руководствоваться при его модуляризации. В этой части сконцентрируемся на типах связей между модулями и различиях в проектировании ООП и UDF-кода. Приятного чтения!

Читать далее

Облегчаем внедрение зависимостей и модульное тестирование с помощью асинхронных функций

Время на прочтение12 мин
Количество просмотров2.1K

...Что, если бы мы могли сделать наш код полностью пригодным для тестирования таким образом, чтобы от нас не требовалось вводить какие-либо новые протоколы, всевозможные моки или сложные абстракции? Давайте же разберемся, как мы могли бы реализовать это, используя новые возможности async/await Swift.

Читать далее

Ближайшие события

Ускоряем прохождение iOS UI-тестов. Часть 1. Запуск тестов без сборки проекта

Время на прочтение6 мин
Количество просмотров6.3K

Хабр, привет!

Меня зовут Борис. Я Mobile AQA lead в Vivid Money.

Это вступительная статья в цикле статей по iOS-автоматизации, в которых я расскажу о том, как ускорить прохождение UI-тестов.

Данная статья будет полезна iOS-автоматизаторам с опытом, либо разработчикам.

В рамках этой статьи мы разберем такие этапы:

- зачем ускорять время прохождения UI-тестов;

- что такое Test runner, и какие они бывают;

- что нужно для прогона тестов без компиляции проекта;

- делимся опытом, как это помогает нам.

Читать далее

SwiftUI туториал слайдер контроллера

Время на прочтение7 мин
Количество просмотров5.6K

Рассмотрим, как реализовать ползунок для переключения между страницами с красивой анимацией.

Читать далее

Swift TableManager

Время на прочтение8 мин
Количество просмотров4.3K

В этой статье хотел бы описать то, как устроена работа с UITableView на наших проектах в компании.

К данному подходу мы пришли в процессе унификации и поиска наиболее удобного решения для работы с таблицами.

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

Читать далее

iOS Community Meetup: видео и материалы встречи

Время на прочтение1 мин
Количество просмотров2.7K

Первый открытый митап iOS Community: приглашаем 2 февраля слушать интересные доклады и вовлекаться в дискуссии! Поговорим про Dependency Injection, подход async/await в задачах с многопоточностью и snapshot-тестирование.

Под катом — видео митапа и презентации спикеров :)

Читать далее

Эволюция UI-тестов в iOS-приложении

Время на прочтение9 мин
Количество просмотров4.8K

Test-driven development — по-прежнему спорная тема. Часто встречается обоснованное, в общем-то, мнение, что такая разработка нужна только большим компаниям, потому что только у них достаточно ресурсов для создания и поддержки большого количества тест-кейсов. Но сегодня на примере iOS-приложения Маркета я покажу, что стремление как раз обратное: хочется, чтобы тесты поглощали как можно меньше времени разработчиков.

Меня зовут Даша, работаю в команде iOS-разработки Яндекс.Маркета. Два года назад мы поняли, что без автотестов нам тяжело: с их помощью мы снизили вероятность крешей после релиза и ускорили регрессионное тестирование. Релизы приложения происходят еженедельно, и это большая нагрузка на тестировщиков и разработчиков — протестировать всё руками и быстро внести правки за несколько дней не получилось бы. Я постараюсь порефлексировать и рассказать, как эволюционировал наш подход к UI-тестам за это время, и, более конкретно, какие работы мы провели для их «улучшения»: почему решили избавиться от JSON-моков и как справились с этой задачей.
Читать дальше →

Flutter vs Native: почему мы переходим с первого на второй

Время на прочтение9 мин
Количество просмотров41K

Привет, Хабр! Меня зовут Сергей, я занимаюсь мобильной разработкой 13 лет и недавно стал руководителем разработки мобильного приложения «Пункты выдачи заказов» в Ozon. Невольно став сместителем существующего строя в проекте (фреймворки, технологии, подход), я стал часто слышать вопрос: «Почему вы отказались от Flutter?».

Слышал я этот вопрос прежде всего от разработчиков моей команды и соискателей на наши вакансии, потом во время доклада на эту же тему на конференции Panda Meetup, в конце концов, даже менеджер нашего проекта подошёл с вопросом: «Ну а всё же почему?». Настолько людей захватывает эта тема, что я решил поделиться развёрнутым ответом.

Читать далее

Развитие способностей коллекций в Swift (на примере функции suffix)

Время на прочтение7 мин
Количество просмотров5K


Протоколы иерархии Sequence/Collection имеют одно из самых важных значений в Swift, начиная со встроенности в язык (например, конструкция цикла for in) и заканчивая популярными функциями высшего порядка mapreduce и т.п. Часто разработчики путаются в особенностях, не осознавая возможности, предоставляемые отдельными протоколами иерархии коллекций. Давайте попробуем разобраться с этими особенностями на примере одной функции, которая по разному реализуется в этих протоколах — функция suffix. Функция suffix возвращает массив из заданного количества элементов взятых с конца последовательности. Мы рассмотрим работу этой функции на основе реализации по умолчанию у протоколов SequenceCollectionBidirectionalCollection и RandomAccessCollection. Все эти протоколы последовательно наследуются друг от друга и на каждом уровне наследования добавляются новые возможности начиная с примитивного последовательного доступа и заканчивая прямым индексным доступом за время O(1).

Читать далее