ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 07.12.2023
Просмотров: 34
Скачиваний: 1
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Библиотеки (Static, Dynamic…)
У Xcode есть build система, она состоит из 5 шагов.
Подключение библиотеки к проекту называется Линкин - это 4-ый этап.
Берет библиотеку и собирает из нее executable файлы (Mach-O файлы)
Static library:
1) Расширение .a
2) Архив с исходниками шинкуется в приложении напрямую
3) Увеличивает размер приложения (сразу загружается в heap)
4) Нельзя добавить ресурсы (Assets и т. д.)
5) Выше скорость работы либы
6) В случае обновления либы, требуется рекомпилить и заново вставлять архив с исходниками в проект.
Dynamic library:
1) Расширение .dylib
2) Исходники поставляются при надобности (в приложении хранятся ссылки на методы)
3) Ниже скорость работы методов, так как требуется нахождение нужного метода
4) Не увеличивает размер приложения
5) Можно использовать в нескольких проектах сразу
6) Можно модифицировать без рекомпиляции всего проекта
Библиотеки - CocoaPods
CocoaPods - менеджеров пакетов.
Использование CocoaPods имеет следующие плюсы и минусы
Плюсы
1) Простота установки и использования.
2) Автоматически выполняет всю настройку Xcode для проекта.
3) Развитое сообщество и поддержка. У него самое большое сообщество, и он официально поддерживается почти всеми библиотеками iOS с открытым исходным кодом.
Минусы
1) Это Ruby, и мы должны управлять зависимостями Ruby, например Bundler,
Gems и т. Д.
2)CocoaPods, обновляющие проекты и файлы Xcode, похожи на волшебство без понимания того, что изменилось
3) Централизованный
4) Невозможно работать с фреймворком и проектом одновременно из-за двухэтапного процесса работы с зависимостями.
Carthage (Карфаген) - менеджеров пакетов.
Есть некоторые плюсы и минусы Карфагена
Плюсы
1) Carthage не коснется ваших настроек Xcode или файлов проекта. Он просто загружает и создает зависимости, чтобы вы могли должным образом контролировать то, что делаете.
2) Децентрализованный
3) Поддерживает подмодули
Минусы
1) Нестабильный и медленный
2) Небольшое сообщество, мало участников
3) Множество ручных шагов, которые нужно выполнить в Xcode, чтобы все настроить
Библиотеки - Swift Package Manager
Swift Package Manager - это не только менеджер пакетов, но и инструмент для сборки и тестирования.
Swift Package Manager:
1) Инструмент на основе командной строки
2) Будучи кроссплатформенным, Swift Package Manager не нуждается в Xcode для создания пакета.
3) Это децентрализовано
4) Swift Package Manager имеет открытый исходный код, а исходный код доступен на Github.
Storage (userDefaults, keychain)
Keychain - это безопасный и зашифрованный способ сохранить небольшие данные хранилища, такие как имя пользователя, пароль и т. д.
UserDefaults - Интерфейс к пользовательской базе данных, где вы храните пары ключ-значение при запуске вашего приложения.
Чем они отличаются?
Keychain и NSUserDefault очень похожи:
1) Они оба хранят хэши.
2) Keychain и NSUserDefault будут изолированы, но keychain не будет
освобождена из памяти, даже если ваше приложение было удалено. Он останется там при следующей установке.
3) Также существует keychain для iCloud, которая работает на нескольких устройствах.
Функции высшего порядка
map - позволяет преобразовывать коллекции при помощи замыкания и возвращает массив с преобразованными элементами. (Может работать с опционалами)
compactMap - позволяет преобразовывать коллекции при помощи замыкания и возвращает массив с преобразованными элементами.
(Отбрасывает значения с nil) всегда не опциональный
flatMap - берет все элементы в коллекции и преобразует в общую последовательность ([«Tim», «Ann»]) -> [«T», «i», «m», «A», «n», «n»]
reduce - перебирает все элементы последовательности и объединяет их вместе и выдает одно значение.
filter - проходит по всем элементам последовательности и возвращает новую последовательность.
sorted - sorted { $0 < $1 }
removeAll - removeAll { $0.hasPrefix(«Name») }
Задачи в коде
????????
protocol
SampleProtocol
{
func
foo
()
}
extension
SampleProtocol
{
func
foo
(
"protocol foo"
)
}
func
bar
(
"protocol bar"
)
}
}
class
SampleClass
: SampleProtocol {
func
foo
(
"class foo"
)
}
func
bar
(
"class bar"
)
}
}
let
sample
: SampleProtocol = SampleClass() sample
.foo() sample
.bar()
prints "class foo"
prints "protocol bar"