iOS разработчик, который делится фишками, своим опытом и опытом других. В этом канале вы сможете найти истории из жизни, подходы к реализации а также новости и тренды из мира iOS-разработки Авторский канал, iOS разработка
"https://apps.apple.com/app/idXXXXXXXXXX?action=write-review"
Здесь XXXXXXXXXX — айди нашего приложения в сторе.enumerated() для получения элементов и индексов не самый правильный способ и предлагает альтернативу.
Интовое значение через enumerated() не должно использоваться в качестве индекса, если только коллекция не zero-based и не индексирована целыми числами. Это счетчик, который всегда начинается с нуля.
🧑💻 Для перебора элементов и индексов можно использовать функцию zip().
// Array<String>
var ingredients = ["potatoes", "cheese", "cream"]
// Array<String>.SubSequence
var doubleIngredients = ingredients.dropFirst()
for (i, ingredient) in zip(
doubleIngredients.indices, doubleIngredients
) {
// do something with the index
doubleIngredients[i] = "\(ingredient) x 2"
}
Мы можем отказаться от enumerated() и подсчитывать элементы с помощью функции zip(). Это можно использовать для продвинутого контроля, начинаем ли мы считать с 0 или с 1.
📖 Кстати! В этой статье можно почитать, как использовать zip для объединения двух массивов.UIBezierPath, который необходим для создания векторных контуров. С его помощью можно создавать и простые фигуры, например прямоугольники, квадраты, овалы и круги, и очень сложные, добавляя прямые и изогнутые линии для набора точек.
📖 В этой статье предлагается практическое руководство по созданию Bezier Paths. Автор рассматривает серию небольших, но понятных примеров, и знакомит нас с обеими концепциями.
😉 Как говорится, от простого к сложному, шаг за шагом!xcrun swift --version
2️⃣ Узнайте местонахождение: xcrun -f swift
3️⃣ Установите альтернативный набор инструментов Swift, если требуется:
— На этом ресурсе можно скачать нужный вариант. Установите его, он будет располагаться тут: /Library/Developer/Toolchains
— Проверьте идентификатор: cat /Library/Developer/Toolchains/swift-5.5-RELEASE.xctoolchain/Info.plist
Например, CFBundleIdentifier для org.swift.550202109201a
— С идентификатором теперь можно выбирать, какой нужен набор инструментов:
xcodebuild -toolchain org.swift.550202109201a
xcrun -toolchain org.swift.550202109201a
Как альтернатива, можно создать переменную окружения:
export TOOLCHAINS=org.swift.550202109201a
Для проверки, что всё сработало, используйте 1️⃣ и 2️⃣ шаги.if let и guard let.
3️⃣ Если связанное значение optional, то также можно использовать соответствующий шаблон. Это будет более понятно на конкретных примерах из статьи.let numbers = [3, 5, 6, 1, 8, 2]
let sortedNumbers = numbers.sorted { (lhs, rhs) in
return lhs < rhs
}
🤔Но может возникнуть ситуация, когда вам потребуется сортировка по нескольким критериям или свойствам.
📖 Именно об этом виде сортировки рассказывается в данной статье. Конечно, существует множество способов решения этой проблемы. При этом автор показывает один из самых простых подходов без каких-либо усложнённых концепций.
🧑💻 Вы сами сможете прокачать этот способ для требуемых задач, как только станут понятны основы.Plain message + key 1 = Encrypted message
Encrypted message + key 2 = Plain message
📖 В материале от SwiftRocks можно прочесть не только об этом, а ещё, например, про:
— Что такое центры сертификации?
— Как работают сертификаты в iOS?
— Что такое provisioning profiles?
Автор в шутку предполагает, что после прочтения статьи вы будете главным специалистом компании по вопросам сертификатов! 😎