Большая тема впереди
➡️ Day 9: Closures, passing functions into functions, and checkpoint 5
В переменной можно хранить функцию:
📌 Запишу в #todo list: “изучить как это работает внутри”
Получается мы можем использовать функцию как аргумент для другой функции - это функции первого класса (first-class functions), в современных языках вполне распространённая штука!
Понравилось как авторы Swift задизайнили неявное именование аргументов
В Kotlin доступен только один неявный параметр, который называется
Эта тема очень важная, т.к. эти знания пригодятся почти в любом проекте👩💻
#hackingwithswift
В переменной можно хранить функцию:
func greetUser() {
print("Hi there!")
}
greetUser()
var greetCopy = greetUser
greetCopy()
Получается мы можем использовать функцию как аргумент для другой функции - это функции первого класса (first-class functions), в современных языках вполне распространённая штука!
Понравилось как авторы Swift задизайнили неявное именование аргументов
let reverseTeam = team.sorted { $0 > $1 }
В Kotlin доступен только один неявный параметр, который называется
it
. Если понадобится использовать 2 и больше параметра - нужно будет явно написать названия этих параметров.Эта тема очень важная, т.к. эти знания пригодятся почти в любом проекте
#hackingwithswift
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2👍1
Всем привет, сегодня будет последний день, за который я планирую закончить оставшиеся из 14 уроков 💪
➡️ Day 11: Access control, static properties and methods, and checkpoint 6
Модификаторы доступа всегда вызывают у меня смешанные чувства. Я отношусь к ним скептически. Пока у меня складывается ощущение, что мне не придётся писать сложную иерархию классов, а поэтому я буду ограничен только использованием этих модификаторов в библиотечных классах.
Статические поля и методы, они и в Африке статические
➡️ Day 12: Classes, inheritance, and checkpoint 7
Изначально я ожидал, что это будет большая тема, но зная что такое
В целом классы в Swift очень похожи на классические классы ООП. Тут есть практически всё, что есть в
Несмотря на то, что обе переменные объявлены с помощью
В случае использования
Также есть тонкости с тем, когда Swift удаляет ненужные объекты. Но это отдельный топик требующий внимания #todo
#hackingwithswift
Модификаторы доступа всегда вызывают у меня смешанные чувства. Я отношусь к ним скептически. Пока у меня складывается ощущение, что мне не придётся писать сложную иерархию классов, а поэтому я буду ограничен только использованием этих модификаторов в библиотечных классах.
Статические поля и методы, они и в Африке статические
Изначально я ожидал, что это будет большая тема, но зная что такое
struct
понимание class
существенно упрощается.В целом классы в Swift очень похожи на классические классы ООП. Тут есть практически всё, что есть в
struct
, но в дополнение идёт наследование, отсутствие автоматических init
методов для полей, и пожалуй самое интересное: объекты передаются по ссылке. Рассмотрим пример:
class User {
var username = “Ivan”
}
let user1 = User()
let user2 = user1
print(user1.username) // Ivan
print(user2.username) // Ivan
user2.username = “Petr”
print(user1.username) // Petr
print(user2.username) // Petr
Несмотря на то, что обе переменные объявлены с помощью
let
, поля могут быть изменены. Изменение user2.username
меняет так же user1.username
.В случае использования
struct User
, нам нужно будет изменить var user2 = user1
, чтобы была возможность изменить поле username
. И что самое отличительное тут, это изменение user2.username
не влечёт изменение user1.username
. Насколько я понимаю, в какой-то момент создаётся копия экземпляра.Также есть тонкости с тем, когда Swift удаляет ненужные объекты. Но это отдельный топик требующий внимания #todo
#hackingwithswift
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Финишная прямая 🏁🏎
➡️ Day 13: Protocols, extensions, and checkpoint 8
Протоколы это что-то вроде интерфейсов в Java/Kotlin. И
Насколько я понял, это тип будущей реализации протокола (как в случае с Self) или же какой-то тип, который будет определён в реализации протокола (как в случае с associatedtype). Выглядит как продвинутые фишки, но полезны они, скорее всего, авторам библиотек. #todo хочется изучить этот концепт более детально!
К слову, в Kotlin это достигается с помощью шаблонов (generics), но возможно есть ключевые отличия. И я жду, когда же в Swift я увижу🤔
🤣
Extensions
Так же присутствуют в Kotlin. Возможность добавить новый функционал для уже существующих
Кстати, это и механизм для создания дефолтной реализации метода в протоколе. В Java/Kotlin это можно сделать напрямую в определении интерфейса.
Хоть меня сложно испугать типами, после того как я осилил Higher-Kinded Types в Scala👩💻 , Self, associatedtype, type erasure, some, any заставляют извилины пошевелиться вновь 🧠
#hackingwithswift
Протоколы это что-то вроде интерфейсов в Java/Kotlin. И
struct
и class
могут реализовывать протоколы. В целом, можно использовать как я привык это делать, но до тех пор пока не потребуется что-то делать с типом Self
и (или) associatedtype
.Насколько я понял, это тип будущей реализации протокола (как в случае с Self) или же какой-то тип, который будет определён в реализации протокола (как в случае с associatedtype). Выглядит как продвинутые фишки, но полезны они, скорее всего, авторам библиотек. #todo хочется изучить этот концепт более детально!
К слову, в Kotlin это достигается с помощью шаблонов (generics), но возможно есть ключевые отличия. И я жду, когда же в Swift я увижу
generics
? var arr = [[String]]()
не в счёт Extensions
Так же присутствуют в Kotlin. Возможность добавить новый функционал для уже существующих
protocol
, struct
, class
.Кстати, это и механизм для создания дефолтной реализации метода в протоколе. В Java/Kotlin это можно сделать напрямую в определении интерфейса.
Хоть меня сложно испугать типами, после того как я осилил Higher-Kinded Types в Scala
#hackingwithswift
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2
Проект 3
В этом проекте мы не создаём приложение, а разбираем ключевые концепции SwiftUI:
🟢 Особенности struct и почему они используются для View
🟢 Порядок применения свойств View
🟢 Почему
🟢 Модификаторы и условные модификаторы
🟢 View как переменные
🟢 Композиция View
🟢 Собственные модификаторы через
🟢 Создание своих
Больше всего меня впечатлили
#hackingwithswift
В этом проекте мы не создаём приложение, а разбираем ключевые концепции SwiftUI:
body
объявляется как some View
View#modifier
и лаконичный вариант с использованием extension
@ViewBuilder
Больше всего меня впечатлили
@ViewBuilder
, и об этом я расскажу в отдельном посте. #todo#hackingwithswift
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🔥1
Всем привет 👋
После дня отдыха (на самом деле ревью и рефлексии о том что сделано), я снова рвусь к знаниям🏃♂️
Сегодняшний урок ничем особо не выдавался: работа с датами и селекторами для чисел.
НО! Мы неожиданно перешли к тренировке своей модельки ML… Поражает насколько просто это делается. И интересно, можно ли использовать модели сделанные на Python👩💻 На первый взгляд этому ничего не мешает, если типы моделек совместимы #todo
Дальше будем ее использовать для предсказания… 🔮🧙♀️
После дня отдыха (на самом деле ревью и рефлексии о том что сделано), я снова рвусь к знаниям
Сегодняшний урок ничем особо не выдавался: работа с датами и селекторами для чисел.
НО! Мы неожиданно перешли к тренировке своей модельки ML… Поражает насколько просто это делается. И интересно, можно ли использовать модели сделанные на Python
Дальше будем ее использовать для предсказания… 🔮
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3👀1
Проект 7: Трекер расходов, разделенных на 2 типа: личные и бизнес
Day 36
🟢
Попробовал тут разобраться с внутренностью, пока всё сложно, есть какой-то
🟢 Решить проблему выше помогает
🟢
🟢
Day 37
В этом уроке мы применяли знания из предыдущего урока, чтобы наконец реализовать приложение
Дальше будет тест по материалу и челенж 🤘
#hackingwithswift
Day 36
@State
и class
по-умолчанию не работают вместе! @State
перестаёт замечать изменения меняются свойства, а не объект целиком.Попробовал тут разобраться с внутренностью, пока всё сложно, есть какой-то
StateStorage
, но в исходниках нет реализации… Это что-то абсолютно новое для меня. Очень хочу в этом разобраться #todo@Observable
, но ставится он над определением класса, и называется Макрос. @State
является Property Wrapper. В Kotlin и то, и другое называется Аннотация и обозначает одно и то же. В Swift по-другому.sheet
- окно, которое по своему функционалу больше похоже на модальное окно, но может содержать любой? контент. Опять же, непривычно, что показ окна основан на флаге, а не на событии/вызове функцииCodable
- инструмент сериализации/десериализации, но в текущей задаче его применение очень ограничено, и я не смог оценить его хоть в какой-то мереDay 37
В этом уроке мы применяли знания из предыдущего урока, чтобы наконец реализовать приложение
Дальше будет тест по материалу и челенж 🤘
#hackingwithswift
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2🆒1
Стало интересно что такое
Это инстанс структуры
Не помню чтобы про это рассказывалось, но callAsFunction в Swift позволяет делать вызов этой функции на объекте, не указывая название этой функции.
В Kotlin тоже есть такой функционал, выглядело бы это так:
Что такое
requestReview
.Это инстанс структуры
RequestReviewAction
определенной как:
// Available when SwiftUI is imported with StoreKit
@available(iOS 16.0, visionOS 1.0, macOS 13.0, *)
@available(tvOS, unavailable)
@available(watchOS, unavailable)
@MainActor public struct RequestReviewAction {
@MainActor public func callAsFunction()
}
Не помню чтобы про это рассказывалось, но callAsFunction в Swift позволяет делать вызов этой функции на объекте, не указывая название этой функции.
В Kotlin тоже есть такой функционал, выглядело бы это так:
class RequestReviewAction {
operator fun invoke() {
println("Requesting review...")
}
}
fun main() {
val requestReview = RequestReviewAction()
requestReview()
}
Что такое
@MainActor
ещё предстоит узнать #todo👍2
Начинаем проект 18 (день 92)
Это технический проект, где мы начинаем изучать особенности layout системы SwiftUI.
На мой взгляд, самая сложная тема, которая требует большого количества экспериментов. Поскольку порой поведение вьюшек, скажем, удивляет.
🔴 Основное правило определение размеров состоит из 3 шагов:
1️⃣ Parent предлагает доступное пространство (propose size)
2️⃣ Child выбирает свой собственный размер (chooses its size)
3️⃣ Parent позиционирует child внутри себя
🔴
🔴 offset & position
🔸 offset - относительное смещение, интересно, что не влияет на последующие модификаторы (например, background color);
🔸 position - абсолютное позиционирование на экране.
Читал в группах по разработке, что layouts это одна из самых важных тем. Посмотрим как пойдёт дальше. Возможно, понадобится посмотреть дополнительные ролики или почитать статьи👀
Как вам новый стиль эмоджи?🔥 правда?
#hackingwithswift
Это технический проект, где мы начинаем изучать особенности layout системы SwiftUI.
На мой взгляд, самая сложная тема, которая требует большого количества экспериментов. Поскольку порой поведение вьюшек, скажем, удивляет.
alignmentGuide
модификатор и кастомный VerticalAlignment
. Тут я совсем не понял как это работает и нужно с этим отдельно разобраться #todoЧитал в группах по разработке, что layouts это одна из самых важных тем. Посмотрим как пойдёт дальше. Возможно, понадобится посмотреть дополнительные ролики или почитать статьи
Как вам новый стиль эмоджи?
#hackingwithswift
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3
Всем привет! 👋 Пора бы заполнить тишину 😂
Сейчас я активно работаю над приложением🇩🇪
Переделываю дизай - да, задумку про минимализм не получается реализовать на💯 Хочется чего-то большего, и тут не получится без “Настроек” и прочих мелочей.
Обновляю не только визуал, хотя это большая часть. Но так же разобрался с локальными нотификациями - приложение само планирует когда и что показать. Либо само приложение, но чаще пользователь, настраивает расписание.
Есть ещё и серверные push-нотификации, когда с сервера присылаются уведомления. Это сложнее, и в моём случае пока не нужно было.
Помимо этого, поскольку я планирую использовать Firebase🔥 и для других приложений, то этот проект выступает в роли подопытного кролика, на котором я реализую:
🔸 anonymous login - вполне говорящее название. Даже без регистрации (и смс) можно будет различать пользователей.
🔸 App Check - Firebase может проверять, что запросы приходят именного из твоего приложения. Работает через интеграцию с сервисами Apple. Когда сделаю - потестирую и отпишу о результатах #todo
Сейчас я активно работаю над приложением
Переделываю дизай - да, задумку про минимализм не получается реализовать на
Обновляю не только визуал, хотя это большая часть. Но так же разобрался с локальными нотификациями - приложение само планирует когда и что показать. Либо само приложение, но чаще пользователь, настраивает расписание.
Есть ещё и серверные push-нотификации, когда с сервера присылаются уведомления. Это сложнее, и в моём случае пока не нужно было.
Помимо этого, поскольку я планирую использовать Firebase
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1🔥1