Лекция 9. EmojiArt Drag / Drop. CS193P Spring 2021.

Это девятая Лекция курса Stanford CS193p, весна 2021 года. На Лекции 9 профессор рассматривает несколько разнообразных тем, прежде, чем погрузится в совершенно новый демонстрационный пример EmojiArt :

  • Коллекции Collection Identifiable элементов
  • Цвета: Color,  UIColor и  CGColor
  • Изображения: Image, UIImage
  • Drag & Drop в SwiftUI
  • Демонстрационный пример EmojiArt, MVVM, Drag & Drop эмодзи 
  • Многопоточное программирование в части НЕ блокировки UI

Коллекции Collection Identifiable элементов

Начинается Лекция 9 с очень интересной темы — коллекции Collection идентифицируемых Identifiable структур struct, которые являются Value ТИПами. Понятно, почему к таким коллекциям возник повышенный интерес в SwiftUI. Дело в том, что одна из основных синтаксических конструкций SwiftUI ForEach — превращает элементы именно такой коллекции в Views, которые в последующем объединяются в контейнеры вроде ZStack, VStack, HStack и т.д. Конечно, хочется комфортно общаться с такими коллекциями, а не использовать каждый раз довольно неуклюжий вариант firstIndex(where: { $0.id = card.id }). В этой ситуации профессор демонстрирует нам применение так называемого протокольно-ориентированного программирования в Swift, когда в расширениях extension соответствующих протоколов protocol вы реализуете нужные вам функции. Конечно, это продвинутое программирование в Swift, но выглядит оно просто, элегантно и мощно. В результате мы получаем для массивов Array, а также множеств Set и словарей Dictionary с Identifiable элементами такие удобные функции как remove, index (matching:) и индексацию (subscripting), которая позволяет изменять свойства элементов коллекции напрямую.

Читать далее

Лекция 5. Свойства Layout @ViewBuilder. CS193P Spring 2021.

Это пятая Лекция курса Stanford CS193p, весна 2021 года, и на этой лекции профессор затронул множество тем, связанных как со SwiftUI, так и непосредственно с языком программирования Swift

По SwiftUI рассматриваются четыре чрезвычайно важных темы:

  1. @State.
  2. Система Layout (управление расположением Views) в SwiftUI.
    1. HStack и VStack.
    2. LazyHStack и LazyVStack, LazyHGrid и LazyVGrid.
    3. GeometryReader. CGSize, CGFloat, CGRect.
    4. ZStack и .background и .overlay.
  3. View модификаторы
  4. @ViewBuilder. 

Что касается языка программирования Swift, то профессор Пол Хэгерти продолжает выполнять своё обещание рассказывать о Swift «с нуля» и на этой Лекции 5 освещает темы, которые проще всего показать на демонстрационных примерах:

  1. Управление доступом (private, private (set) и другие).
  2. Вычисляемые свойства (get{} и set {}).
  3. Расширения extension
  4. Функциональное программирование. 
  5. Наблюдатели свойств (Property Observer) и их отличие от вычисляемых свойств. 
  6. Оформление констант в Swift.
  7. typealias, «вывод ТИПа из контекста» (inference),  “подчеркивание” “ _” внешнего имени параметра.

Читать далее