Что нового в Swift 4.2

Оглавление

  1. Bool.toggle
  2. Алгоритмы для Sequence и Collection
  3. Перечисление всех cases enum
  4. Случайные числа
  5. Hashable redesign
  6. Условное соответствие (протоколам)
  7. Dynamic member lookup
  8. #error and #warning
  9. MemoryLayout.offset(of:)
  10. @inlinable
  11. Immutable withUnsafePointer

Требования

Этому playground требуется Xcode 10 или свежий слепок Swift 4.2. Скачать Xcode 10 beta можно здесь а слепок Swift 4.2 здесь.

Обратите внимание

Этот playground фокусируется на новых, ориентированных на программистов особенностях, которые могут быть легко продемонстрированы в формате playground. Swift 4.2 содержит гораздо больше изменений, чем перечислено здесь. Под капотом Swift 4.2 множество усовершенствований, в том числе новые возможности Swift Package Manager.

Взгляните на полный список изменений (changelog), а также на полный список реализованных в Swift 4.2 предложений (который содержит ряд предложений реализованных, но не упомянутых в changelog).

Читать далее

Задание 5 Stanford CS 193P Fall 2017. Галерея изображений Image Gallery. Решение обязательных пунктов. Часть 1.

Содержание

В этом Задании вы должны освоить работу с Table View, Collection View, Scroll View и Text Fields, понять, как работает многопоточность (multithreading). 

Разработка этого Задания начинается “с нуля”. Оно не имеет отношения к первым 4-м Заданиям этого семестра.

Текст Домашнего задания на английском языке доступен на  iTunes в пункте “Programming: Project 5: Image Gallery″. На русском языке вы можете скачать Задание 5 здесь: Задание 5.pdf.

Для решения Задания 5 необходимо ознакомиться с Лекцией 11Лекцией 12 и началом Лекции 13.

Мое решение Задания 5 находится на Github для iOS 11 и на Github для iOS 12 в папке ImageGallery_V. Для этого поста это вариант ImageGalleryOnly.

Центральной частью этого Задания 5 является коллекция изображений Collection View, которая моделирует Галерею Изображений Image Gallery. Необходимо обеспечить ее работоспособность, настроить ее параметры для отображения изображений в удобной и визуально привлекательной форме, подключить определенные жесты для операций над ее элементами, а также наделить ее механизмом Drag & Drop, который позволит добавлять изображения из других приложений, например, поисковой системы Google, и избавляться от ненужных элементов, кидая их в «Мусорный контейнер». В приложении предполагается создание целой серии таких тематических Галерей Изображений, каждой из которых будет дано имя, а список имен всех Галерей размещен в таблице Table View, которую тоже можно будет редактировать.

Логически выполнение обязательных пунктов Задания 5 распадается на две части: первая часть ( ей посвящен этот пост) будет обеспечивать работу одной Галереи Изображений Image Gallery и будет использовать исключительно коллекцию Collection View, а вторая часть будет обеспечивать работу со списком имен Галерей Изображений с помощью таблицы Table View, функционирование которой мы отработаем отдельно, а затем подстыкуем к ней коллекцию Collection View, уже настроенную под Галерею изображений Image Gallery.

Вторая часть будет представлена в следующем посте.

Читать далее

Сказ о том как один из flatMap превратился в compactMap

Swift совмещает возможности объектно-ориентированного и функционального программирования. Если объектно-ориентированная часть оттачивалась десятилетиями на Objective-C и вошла составной частью в SwiftObjective-C и Swift практически одинаковый SDK), то часть, связанная с функциональным программированием продолжает оставаться в тени, изредка «поблескивая» отдельными довольно простыми решениями. Но вот появился прекрасный ресурс pointfree.co, посвященный исключительно функциональному программированию в Swift. Мы решили воспользоваться этим и представить вашему вниманию перевод бесплатного фрагмента, касающегося переименования одной из перегрузок (overload) функции высшего порядка flatMap в compactMap. Но это лишь повод для того, чтобы вы смогли проследить ход мысли программистов, заточенных на функциональное программирование. Столкнувшись с переименованием перегрузки (overload) функции обычный один программист лишь испытает раздражение, другой проведет методичный, но узкий анализ причины этого переименования, а гуру по функциональному программированию может сделать пару любопытных открытий, элегантно дополняющих арсенал функционального программирования на Swift.

Swift 4.1 упразднил и переименовал определенную перегрузку (overload) функции flatMap. Что делает этот flatMap отличным от других? Мы исследуем это и в результате увидим, как понимание этого различия поможет нам изучить обобщение этой операции над другими структурами и получить новый полезный код!

Читать далее

Лекция 17 CS193P Fall 2017 — Core Motion & Camera.

Лекция 17 посвящена некоторых специфических API доступа к оборудованию (hardware) нашего устройства. Рассматриваются два API: это Core Motion, отвечающее, главным образом, за определение местоположения устройства в пространстве в процессе перемещения устройства, и Фотокамера (Camera), с помощью которой мы можем сделать фотографию и/или видео и разместить их в своем приложении.

Итак, CoreMotion — это объектно-ориентированное API для доступа к первичным датчикам движения на вашем устройстве. Core Motion поставляет в приложение данные первичных датчиков Apple приборов: акселерометра (accelerometer), гироскопа (gyro) и магнитометра (magnetometer).

Класс, с помощью которого вы можете получить всю информацию как с самих датчиков, так и о наличии датчиков в приборе, называется CMMotionManager. В лекции подробно рассматриваются различные режимы получения информации как с физических датчиков, так и с абстрактного комбинированного датчика CMDeviceMotion.

Датчики движения в iOS — удивительный механизм. И надо отдать должное инженерам Apple — подключение датчиков к приложению является предельно простым, а их дальнейшее использование не ограничивает вас ни в чём. Как и все приложения, дополненные реальностью, они захватывают в первую очередь тем, что дают вам в руки инструмент для преобразования информации об окружающем вас мире в виртуальный мир вашего телефона. Профессор показывает  демонстрационный пример игры в карты Playing Cards, дополняя ее элементами реального Мира, а именно реальным ускорением свободного падения, полученным с акселерометра. Эти показания датчика движения нашего устройства (iPhone или iPad) «подцепляются» к «поведению» гравитации UIGravityBehavior, действующему в динамическом аниматоре Dynamic Animator.  Читать далее

Лекция 16 CS193P Fall 2017 — Еще больше Segues.

Вся Лекция 16 посвящена Segues. Мы уже изучили на прошлых Лекциях Show segue и Show Detail segue, которые работают в Navigation Controllers и Split View Controllers.

На Лекции 16 изучаются все оставшиеся типы Segues: Modal, Unwind, Popover, Emded.

Сначала излагается теоретическая часть по каждому виду Segue, а затем для этого вида Segue следует небольшой демонстрационный пример, показывающий Segue в действии. В результате у профессора формируется блестящий демонстрационный пример, в котором несмотря на различия Segues — Modal и Popover адаптируют свое представление на iPhone, а функционирование Emded вообще не зависит от платформы, все Segues создают новые MVCs,  а Unwind — нет, —  все они работают «бок о бок» в одном приложении и даже разделяют код.

Читать далее

Лекция 15 CS193P Fall 2017 — Alerts и Action Sheet, Notifications & KVO, «жизненный цикл» приложения.

В Лекции 15 освещаются 3 темы:

  • Экстренные сообщения Alerts и списки действий Action Sheets
  • Уведомления Notifications («радиостанции») и KVO
  • “Жизненный цикл” приложения (UIApplication, AppDelegate, Info.plist, Capabilities)

Читать далее

Лекция 14 CS193P Fall 2017 — Еще о Documents, Демонстрационный пример Persistence (постоянное хранение) и Documents.

Лекция 14 состоит из двух неравных частей :

  • первая меньшая часть является продолжением теоретической части, связанной с UIDocument и начатой на Лекции 13. Она посвящена UIDocumentBrowserViewController , прекрасному и очень мощному интерфейсу в вашем собственном приложении для создания файлов, перемещения файлов, удаления файлов, размещения их в папках, перетаскивания файлов с iCloud Drive на локальный жесткий диск.
  • вторая  часть — это огромный демонстрационный пример, охватывающий тему постоянного хранению (persistence) и тему создания приложений, ориентированных на работу с документами, на основе UIDocument и браузера документов UIDocumentBrowserViewController.

Читать далее

Лекция 13 CS193P Fall 2017 — Emoji Art Demo, Persistence (постоянное хранение) и Documents.

Лекция 13 состоит из двух неравных частей :

  • первая меньшая часть является продолжением демонстрационного примера Emoji Art в плане работы с текстовым полем UITextField при пополнении коллекции эмоджи Collection View,
  • вторая  часть — чисто теоретическая и посвящена очень важной теме — постоянному хранению (persistence) и работе с документами UIDocument

Продолжение демонстрационного примера Emoji Art и UITextField

Демонстрационный пример заключается в следующем: в приложении Emoji Art, полученном в прошлый раз, создается текстовое поле, которое появляется прямо в нашей небольшой коллекции эмоджи UICollectionView, и с помощью этого текстового поля вы сможете добавлять новые эмоджи в эту коллекцию.

Читать далее

Задание 4 Stanford CS 193P Fall 2017. Анимационная игра Set. Решение обязательных пунктов 1-6.

Содержание

В этом Задании вы добавите анимацию в вашу игру Set и скомбинируете ваши 3 первых Задания в одно.
Текст Домашнего задания на английском языке доступен на  iTunes в пункте “Programming: Project 4: Animayed Set″. На русском языке вы можете скачать Задание 4 здесь:

Задание 4 Игра Графический Set iOS 11.pdf

 Вам необходима реализация Заданий 1- 3. Начинаем выполнять с кода Задания 3.

Для решения Задания 4 необходимо ознакомиться с Лекциями 7 — 10.

Мое решение Задания 4 состоит из двух приложений: анимационной игры Set БЕЗ использования делегата UIDinamicAnimationDelegate динамического аниматора, которая находится в папке Set IV NoExtra, и  анимационной игры Set с использованием делегата UIDinamicAnimationDelegate, которая находится в папке Set IV NoExtra Stasis.

Все это находится на Github для iOS 11 и на Github для iOS 12.

Пункты 1, 2 и 3 обязательные

1. Ваше приложение должно продолжать играть в соло версию игры Set, как это требовалось в Задании 3 (с особенностями, указанными ниже).

2. Вы должны анимировать следующие действия в игре Set:

  • Реорганизация карт. Если карты добавляются или исчезают из игры, то карты должны перемещаться плавно ( не прыгать мгновенно) на их новые позиции.
  • Сдача новых карт. Это включает как сдачу начальных 12 карт, так и сдачу 3-х новых карт в любое время. Карты должны “лететь” через экран из некоторой “колоды”, расположенной где-то на экране. Внешний вид колоды полностью отдается на ваше усмотрение. Никакие две карты не должны сдаваться одновременно, хотя их анимации могут немного перекрываться.
  • Обнаружение совпадения. Все «совпавшие» карты должны “улетать”  с тех мест, где они находились одновременно и начать отскакивать от краев экрана в течение пары секунд прежде, чем собраться в некоторую “стопку сбрасывания”, где-то расположенную на экране. Внешний вид “стопки сбрасывания” полностью отдается на ваше усмотрение.
  • Переворот карт. Карты сдаются “лицевой” стороной вниз до тех пор, пока не достигнут своего местоположения, затем они должны быть перевернуты для проявления содержимого карты игры Set. Для совпавших» карт после того, как они «улетели» в  “стопку сбрасывания”, по крайней мере верхняя карта в этой “стопке сбрасывания” должна лежать “лицевой” стороной вниз.

3. Ваша реализация анимации должна использовать UIViewPropertyAnimator, UIDynamicAnimator и class метод transition(with:…) класса UIView. Возможно, вам понадобиться таймер Timer, но это не строго обязательно.

Читать далее

Лекция 12 CS193P Fall 2017 — Drag&Drop, таблица Table View, коллекция Collection View и текстовое поле Text Field.

Если Лекция 11 представляет собой в основном теоретическую часть, то Лекция 12 является огромным демонстрационным примером, показывающим возможности механизма Drag & Drop, таблицы Table View и коллекции Collection View в действии. Лишь в самом конце Лекции 12 профессор рассматривает пока только теоретически  текстовое поле UITextField, демонстрационный пример для которого по техническим причинам перенесен а Лекцию 13.

Центральной частью Лекции 12 является демонстрирование возможностей коллекции Collection View как двумерного средства размещения информации неограниченного объема с помощью пользовательских (Custom) элементов items, так и настройки коллекции Collection View на двустороннюю работу с механизмом Drag & Drop.

Если на Лекции 11 было показано, как подключить механизм Drop для обычного UIView, то на Лекции 12 все внимание уделено коллекции Collection View, с помощью которой можно не только создавать коллекцию эмоджи, но использовать их с помощью механизма Drag & Drop как для для создания живописных эмоджи шедевров, так и для поиска в Google, например, в другом приложении — Safari.

Профессор показывает, как работает механизм Drag & Drop в “Мире” коллекции Collection View, и это выглядит почти в точности, как и в “Мире” НЕ Collection View. Единственная разница между Drag в “Мире” и  коллекции Collection View состоит в том, что Collection View помогает вам с indexPath элемента коллекции, который вы хотите перетаскивать Drag. Она знает, где находится ваш палец и интерпретирует это как indexPath элемента коллекции, который вы “перетаскиваете” в настоящий момент или как indexPath элемента коллекции, куда вы “бросаете”что-то в данный момент. Так что коллекции Collection View снабжает вас indexPath, а в остальном это абсолютно то же самое.

Читать далее