Примеры маленьких приложений, с целью знакомства и изучения различного функционала. В каждом из них есть готовые шаблоны/примеры использования. Ниже описание:
- Работа про API и JSON, подробнее здесь
- Чтобы распарсить JSON на нужную модель quicktype
- Используется доступный погодный api Open Weather
- Protocol Codable включающий в себя протоколы
#Decodable(раскодировать) и#Encodable(закодировать) - Передача данных через
closure(вариант сdelegationв конспекте описан) - Создаем универсальный запрос с помощью enum в функцию с выбором нужного варианта подстановки с помощью switch (имя города или координаты геопозиции пользователя)
- Используются "Списки захвата в Swift: в чём разница между ссылками weak, strong и unowned?"
- CoreLocation
- class CLLocationManager для настройки, запуска и остановки основных служб определения местоположения
- CLLocationManagerDelegate - методы, для получения событий от связанного объекта location-manager.
Многопоточность, #multithreading, подробнее здесь
DispatchQueue - oбъект, который управляет выполнением задач последовательно или одновременно в основном потоке вашего приложения или в фоновом потоке.
-
#CoreData – нативный фреймворк от Apple для хранения данных пользователя у него на устройстве. Это не база данных
-
Core Data Stack - manage and persist your app’s model layer.
- Экземпляр #NSManagedObjectModel описывает типы вашего приложения, включая их свойства и взаимосвязи.
- Экземпляр #NSManagedObjectContext отслеживает изменения в экземплярах типов вашего приложения.
- Экземпляр #NSPersistentStoreCoordinator сохраняет и извлекает экземпляры типов вашего приложения из хранилищ.
-
Generating Code автоматически или вручную создавайте подклассы управляемых объектов из сущностей (entities).
- Class #Definition – класс будет существовать в системе, к нему нет прямого доступа из Navigator, не виден в Xcode.
- #Manual/None – полный ручной контроль над классом, можно добавить свою логику. Нужно вручную добавить. Class будет в проекте.
- #Category/Extension – только Extension
-
#CoreDataStack – механизм внутри фреймворка Core Data, который позволяет хранить данные на постоянной основе. Persistent Store – постоянное хранилище информации. Весь механизм внутри Persistent Container. И состоит из 3 основных классов с которыми мы сталкиваемся:
- Managed Object Context – это наш контекст который нужно сохранить, это изменения.
- Persistent Store Coordinator – определяет на основек какой модели (Managed Object Model) мы будем хранить данные
- Managed Object Model - сама модель
-
DateFormatter - A formatter that converts between dates and their textual representations
-
Сохранение
context.save()в CoreData -
NSFetchRequest - A description of search criteria used to retrieve data from a persistent store.
-
NSError - Information about an error condition including a domain, a domain-specific error code, and application-specific information
-
NSPredicate - Определение логических условий для ограничения поиска для выборки или для фильтрации в памяти.
@"attributeName == %@" -
Class Bundle - Представление кода и ресурсов, хранящихся в каталоге пакета на диске. Используя объект bundle, вы можете получить доступ к ресурсам bundle, не зная структуры bundle. Общая схема использования объекта bundle выглядит следующим образом: Создайте объект bundle для предполагаемого каталога bundle. Используйте методы объекта bundle, чтобы найти или загрузить необходимый ресурс.
- CoreData Entities Manual/None, классы сущностей в проекте
- Class NSManagedObject - A base class that implements the behavior for a Core Data model object
- Class NSPersistentContainer - A container that encapsulates the Core Data stack in your app.
- CoreDate код вынесен отдельно в класс CoreDataStack
- Сохранение
context.save()и удалениеcontext.delete(...)данных CoreData
- Сохранение
context.save()и удалениеcontext.delete(...)данных CoreData - #viewWillAppear(_:) - метод вызывается до того, как представление контроллера представления будет добавлено в иерархию представлений, и до того, как будут настроены какие-либо анимации для отображения представления. Вы можете переопределить этот метод для выполнения пользовательских задач, связанных с отображением представления. Например, вы можете использовать этот метод для изменения ориентации или стиля строки состояния в соответствии с ориентацией или стилем представляемого представления. Если вы переопределяете этот метод, вы должны вызвать super в какой-то момент вашей реализации.
CoreData end
Простое приложение построенное на CollectionViewController. В приложении использованы основные принципы работы с таблицей и ячейками.
- Navigation Controller Scene
- UICollectionViewController - контроллер представления, который специализируется на управлении представлением коллекции.
- UICollectionViewCell
- UICollectionViewFlowLayout - верстка элемента кодом
- prepare(for:sender:) - уведомляет контроллер представления о том, что переход вот-вот будет выполнен.
- numberOfSections(in:) - возвращает количество разделов (section) в коллекции.
- collectionView(_:numberOfItemsInSection:) - запрашивает у вашего объекта источника данных количество элементов в указанном разделе.
- collectionView(_:cellForItemAt:) - запрашивает у вашего объекта источника данных ячейку, соответствующую указанному элементу в представлении коллекции.
- UIActivityViewController - контроллер представления, который вы используете для предоставления стандартных услуг из своего приложения. Меню по тапу на кнопку "Tap to Share". UIActivityViewController(activityItems:applicationActivities:) - Инициализирует новый объект контроллера представления активности, который воздействует на указанные данные.
- Кастомная настройка ячейки кодом :
- UICollectionViewDelegateFlowLayout - Методы, которые позволяют координировать работу с объектом компоновки (#flow layout) потока для реализации компоновки на основе сетки. Методы настройки размера/отступов/направления внутри. Реализуется в extension к class.
- UICollectionViewFlowLayout - Объект макета, который организует элементы в сетку с необязательными видами верхнего и нижнего колонтитулов для каждого раздела. Методы настройки размера/отступов/направления внутри. Реализуется в viewDidLoad()
Простое приложение построенное на TableViewController, это простой аналог более сложного приложения MyPlaces. В приложении использованы основные принципы работы с таблицей и ячейками.
- Navigation Controller Scene
- UITableViewController
- prepare(for: sender: ) - уведомляет контроллер представления о том, что переход вот-вот будет выполнен.
- numberOfSections(in:) - возвращает количество разделов (section) в табличном представлении.
- tableView(_: numberOfRowsInSection: ) - указывает источнику данных возвращать количество строк в заданном разделе (section) табличного представления.
- tableView(_: cellForRowAt: ) - запрашивает у источника данных ячейку для вставки в определенном месте табличного представления
- tableView(_:editingStyleForRowAt:) - запрашивает у делегата стиль редактирования строки в определенном месте табличного представления. У нас в приложении отвечает за отображение кнопок меню удаления/добавления при нажатии на Edit, по умолчанию стоит .delete
- tableView(_:canMoveRowAt:) - запрашивает источник данных, может ли данная строка переместиться в другое место в табличном представлении.
- tableView(_:moveRowAt:to:) - указывает источнику данных переместить строку из определенного местоположения в табличном представлении в другое местоположение. Настройка перемещения ячеек из меню Edit
- tableView(_:trailingSwipeActionsConfigurationForRowAt:) и tableView(_:leadingSwipeActionsConfigurationForRowAt:) - Returns the swipe actions to display on the trailing or leading edge of the row. К ним можно добавить кнопки, которые будут отображаться при активации swipe
This is a beautiful, dark-mode enabled weather app. You'll be able to check the weather for the current location based on the GPS data from the iPhone as well as by searching for a city manually.
-
dark-mode enabled app.
-
use vector images as image assets.
-
use the UITextField to get user input.
-
delegate pattern.
-
Swift protocols and extensions.
-
Swift guard keyword.
-
Swift computed properties.
-
Swift closures and completion handlers.
-
URLSession to network and make HTTP requests.
-
JSON with the native Encodable and Decodable protocols.
-
Grand Central Dispatch to fetch the main thread.
-
Core Location to get the current location from the phone GPS.
I used SwiftUI, simple Scene, and configuration VStack and ZStack
"I Am Rich" was an iOS mobile application developed by Armin Heinrich that was distributed through the App Store. When launched, the screen contained only a glowing gem and an icon displayed the following mantra in large text: "I am rich"
The application is described as "a work of art with no hidden function at all", with its only purpose being to show other people that they were able to afford it.
Eight people bought the application, at least one of whom claimed to have done so accidentally. I Am Rich was sold on the App Store for US$999.99, €799.99, and GB£599.99, the highest price Apple allowed for App Store content. The application was removed from the App Store without explanation by Apple Inc. the day after its release, August 6, 2008
I used SwiftUI, simple Scene, and configuration VStack and ZStack
You can ask the app to make all your hard decisions! With this app in your pocket, you’ll always have an answer to life’s many conundrums!
Используется массив изображений и randomElement(), returns a random element of the collection.
работа с Calendar() day, month, year, DateComponents(), DateFormatter(), вывод даты dateFormat, взаимодействие с клавиатурой touchesBegan() - сообщает этому объекту, что в представлении или окне произошло одно или несколько новых касаний.
используется UISlider, округление round()
UITextField c login и password, выбор segue учитывая идентификатор performSegue(withIdentifier:, sender:), возврат segue на другой экран с помощью unwind Segue реализуется как к элементом, так и с View (предпочтительнее). Взаимодействие с UIStoryboardSegue (destination, source, identifier). Передача данных с одного View на другой, prepare(for segue: UIStoryboardSegue, sender: ) этот метод уведомляет view controller о том, что переход вот-вот будет выполнен. . Взаимодействие с клавиатурой touchesBegan() - сообщает этому объекту, что в представлении или окне произошло одно или несколько новых касаний.
пример использования UIButton и UILabel, свойства элементов, верстка кодом (isHidden, font, text, setTitle, titleLabel?.text, textColor, setTitleColor, backgroundColor)
-
UISegmentedControl, добавить кодом segment segmentedContol.insertSegment.
-
UISlider (
.value,.minimumValue, .maximumValue, .maximumTrackTintColor, .minimumTrackTintColor, .thumbTintColor). -
UITextField Есть делегат UITextFieldDelegate с помощью которого можно отслеживать взаимодействия пользователя с текстовым полем.
-
UIAlertController an object that displays an alert message.
-
UIAlertAction action that can be taken when the user taps a button in an alert. Создаем кнопку с предупреждением.
-
Метод present() вызывает на экран наше предупреждение.
-
UIScrollView View, которое позволяет прокручивать и масштабировать содержащиеся в нем view.
-
UIDatePicker барабан выбора, даты, времени. DateFormatter() - форматирование даты для вывода.
-
UISwitch использования switch для скрытия/отображения элементов на экране, (
.isOn, .onTintColor, .thumbTintColor) -
UIPickerView вращающийся барабан с возможностью выбора среди элементов. UIPickerViewDelegate, и UIPickerViewDataSource. Отдельная кнопка в PickerView UIToolbar и UIBarButtonItem. При выборе textField за место клавиатуры по умолчанию, вызывается PickerView.
-
UITextViewDelegate - протокол включающий в себя методы отслеживания тапов, и не только.
-
UIStepper - элемент управления, для увеличения или уменьшения значения.
-
UIActivityIndicatorView - анимация прогресса загрузки данных.
-
UIProgressView - индикатор прогресса загрузки.
- Struct
- Navigation Controller Scene
- UINavigationItem
- UITableViewController
- UIListContentConfiguration - конфигурация содержимого для представления содержимого на основе списка
- prepare(for:sender:) - уведомляет контроллер представления о том, что переход вот-вот будет выполнен.
- numberOfSections(in:) - возвращает количество разделов (section) в табличном представлении.
- tableView(_:numberOfRowsInSection:) - указывает источнику данных возвращать количество строк в заданном разделе табличного представления.
- tableView(_:cellForRowAt:) - запрашивает у источника данных ячейку для вставки в определенном месте табличного представления
- Struct
- Navigation Controller Scene
- UINavigationItem
- UICollectionViewController - контроллер представления, который специализируется на управлении представлением коллекции.
- UICollectionViewCell
- UICollectionViewFlowLayout - верстка элемента кодом
- prepare(for:sender:) - уведомляет контроллер представления о том, что переход вот-вот будет выполнен.
- collectionView(_:numberOfItemsInSection:) - запрашивает у вашего объекта источника данных количество элементов в указанном разделе.
- collectionView(_:cellForItemAt:) - запрашивает у вашего объекта источника данных ячейку, соответствующую указанному элементу в представлении коллекции.
StackView - streamlined interface for laying out a collection of views in either a column or a row.
TabBar - a control that displays one or more buttons in a tab bar for selecting between different subtasks, views, or modes in an app.
- WebKit - integrate web content seamlessly into your app, and customize content interactions to meet your app’s needs.
- WKWebView - an object that displays interactive web content, such as for an in-app browser.
- WKNavigationDelegate - methods for accepting or rejecting navigation changes, and for tracking the progress of navigation requests.
- UITextFieldDelegate - a set of optional methods to manage the editing and validation of text in a text field object.
- URL
- URLRequest
- load(_:) - loads the web content that the specified URL request object references and navigates to that content.
- webView.allowsBackForwardNavigationGestures - Boolean value that indicates whether horizontal swipe gestures trigger backward and forward page navigation. Добавим свайпы вперед и назад
Свойства webView
canGoBack- Boolean value that indicates whether there is a valid back item in the back-forward list.canGoForward- a Boolean value that indicates whether there is a valid forward item in the back-forward list.
И методы webView
-
goBack()- navigates to the back item in the back-forward list. New navigation to the requested item, or nil if there is no back item in the back-forward list. -
goForward()- navigates to the forward item in the back-forward list. New navigation to the requested item, or nil if there is no forward item in the back-forward list. -
resignFirstResponder() - notifies this object that it has been asked to relinquish its status as first responder in its window. Им "скрываем" клавиатуру после ввода нужного адреса ссылки.
Определяет область в иерархии представлений контроллера представления для размещения дочернего child view controller. The child view controller указывается с помощью встроенного перехода segue.
- Struct
- UITableViewController
- tableView(_:numberOfRowsInSection:) - указывает источнику данных возвращать количество строк в заданном разделе табличного представления.
- tableView(_:cellForRowAt:) - запрашивает у источника данных ячейку для вставки в определенном месте табличного представления
- tableView(_:didSelectRowAt:) - tells the delegate a row is selected.
C его помощью можно сделать ознакомительный функционал ввиде некой презентации для пользователя который впервые скачал ваше приложение
-
UIPageViewController - a container view controller that manages navigation between pages of content, where a child view controller manages each page
-
UIPageViewControllerDataSource – протокол UIPageViewControllerDataSource принимается объектом, который предоставляет контроллеры просмотра контроллеру просмотра страницы по мере необходимости в ответ на жесты навигации. Благодаря ему будем листать нашу презентацию. С ним идут 2 обязательных для протокола метода (
viewControllerBeforeandviewControllerAfter, вперед и назад по презентации) -
viewDidAppear(_:) - уведомляет контроллер представления о том, что его представление было добавлено в иерархию представлений.
-
class UserDefaults - интерфейс к базе данных пользователя по умолчанию, где вы постоянно сохраняете пары ключ-значение при запуске вашего приложения.
-
set(_:forKey:) - sets the value of the specified default key to the specified Boolean value.
-
instantiateViewController(withIdentifier:) - cоздает контроллер представления с указанным идентификатором и инициализирует его данными из раскадровки. На основе storyboard with identifier.
-
present(_:animated:completion:) - presents a view controller modally.
-
dismiss(animated:completion:) - oтклоняет контроллер представления, который был представлен модально контроллером представления.
The base class for concrete gesture recognizers.
-
UISwipeGestureRecognizer - a discrete gesture recognizer that interprets swiping gestures in one or more directions.
-
.direction - the permitted direction of the swipe for this gesture recognizer.
-
UITapGestureRecognizer - a discrete gesture recognizer that interprets single or multiple taps.
-
numberOfTapsRequired - the number of taps necessary for gesture recognition.
-
addGestureRecognizer(_:) - прикрепляет a gesture recognizer to the view.
-
require(toFail:) - creates a dependency relationship between the gesture recognizer and another gesture recognizer when the objects are created.



































