Kotlin/Swift (iOS) Туда и Обратно
36 subscribers
130 photos
21 videos
9 files
88 links
Канал - журнал, рассказывающий об опыте изучения Swift & iOS backend-разработчиком на Java & Kotlin
Download Telegram
Я думаю достаточно на сегодня постов. Мне нужна передышка 😅
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2
This media is not supported in your browser
VIEW IN TELEGRAM
Извините, но похоже еще один пост сегодня будет ☺️
Я не мог не закончить Проект 6 сегодня
Челлендж состоит в том, что нужно прикрутить анимацию к сделанному ранее приложению Guess Flag
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2👍1
Всем привет 👋

Сегодня нужно было самостоятельно сделать тренажёр для таблицы умножения.
Выбираете лимит для множителей и количество вопросов, затем предоставляется 3 варианта, где только 1 верный

В UI/UX я пока совсем мало что понимаю, и то, что хочется сделать - не получается
Задумка была похожая, но намного красивее.
Чувствую ограничение в доступных мне инструментах, и трудности настройки стилей 😕
👍1🤔1
Я не мог нормально спать после такого разочарования, зато теперь я больше знаю про позиционирование View!

К тому же, освоил создание переиспользуемых View, где параметры передаются через @Binding, что позволяет динамически изменять переданные значения.

А еще я научился настраивать цвета в Assets 💪

🔥 новый дизайн значительно лучше
👍 до этого тоже было нормально
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3
Бегло прочитал эту книгу т.к. большая часть тем мне известна, но что-то удалось оттуда подчерпнуть.
Основная претензия к оформлению листингов, тут это просто текст. Воспринимать их сложнее.
В целом книга больше похожа на справочник, а не учебное пособие, несмотря на наличие комментариев от автора. Заданий я тоже не нашел.

Есть и вторая книга, но она не входит в подписку, а покупать желания нет 😁, тем более она про UIKit, до которого я еще не дорос.

Буду продолжать курс hackingwithswift
👍2👀1
Проект 7: Трекер расходов, разделенных на 2 типа: личные и бизнес

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
И да, мне интересно получить обратную связь, ведь мы вместе уже больше трети 100 Days марафона! Дайте обратную связь 🙏
Anonymous Poll
78%
Всё круто, продолжай 💪
0%
Бросай это дело 🤮
22%
Нормально… 🫠
Результат челенжа!

Попытался решить задачу без подглядывания в пройденный материал, пока не получается. Иногда даже простые вещи требуют гугления. Но я уверен, что скоро работа с элементарными компонентами будет для меня привычна и не вызывать вопросов 🤞

В этом приложении пришлось разделить список трат на 2, т.к. удаление работает через IndexSet, который, как я понимаю, соответсвует индексам из ForEach. Они в свою очередь должны соответствовать индексам массива из которого мы удаляем элементы. Таким образом общий список обрабатывать сложнее, проще разделить!

Начинаем следить за тратами?
Please open Telegram to view this post
VIEW IN TELEGRAM
Нужно быть внимательнее 🤔
🤔1😱1
Когда я решил изучить Swift & SwiftUI, я и не предполагал, что это будет отличной возможностью попробовать не только новые технологии, но и техники, о которых я многое слышал, но так и не решался применить в работе.

Уже 5 учебных дней я пытаюсь дробить обучение на 25 минутные интервалы, используя технику Помодорро 🍅

25 минутный интервал требует полной концентрации, но достигается это пока с трудом. Несмотря на это, бывает порой трудно прерваться, но делать это всё же приходится.

5 минутные интервалы отдыха я использую более эффективно, т.к. в это время я должен себя чем-то занять. Поэтому я либо пью воду, либо разминаюсь, отжимаюсь, или просто хожу.

До 30 минутного перерыва дело либо не доходило, либо на нем всё и заканчивалось 😃

В дальнейшем, когда мы доберемся до тестирования, я хочу попробовать TDD (Test Driven Development). Надеюсь, эта практика хорошо подходит для UI приложений, таких как SwiftUI.

Если использовали Помодорро, поделитесь своим опытом ☺️
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2👏1
Проект 8

Самый большой из всех изученных, он занимает 4 дня в расписании.
Приложение представляет собой справочник по лунным программам NASA

Пользователь может посмотреть описание каждой из представленных программ, команду космонавтов и какждого члена команды по отдельности
👍1
Пройдёмся по основным темам урока

🟢 Отрисовка Image используя различные стратегии: scaledToFit, scaledToFill, containerRelativeFrame, clipped.
🟢 Скроллинги - вертикальные, горизонтальные, ленивые и нет.
🟢 NavigationStack - встроенный механизм для перехода между различными View.
Помнится когда я пробовал это на Android 👩‍💻, переходы между Activity были непростой задачей, по крайней мере, такие воспоминания. В SwiftUI 👩‍💻 это делает предельно просто!
🟢 Codeable это тип который может быть конвертирован в и из какого-то внешнего представления.
По своей сути это:

typealias Codable = Decodable & Encodable

В нашем случае мы использовали его для работы с JSON
🟢 Grid элементы для построения таблиц

Урок очень полезный, пригодится мне в дальнейшем без сомнений! 🤩

#hackingwithswift
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
На этот раз я справился отлично! 🥳
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1👏1
Что мне нравится в этих тестах, после ответа автор даёт развернутое пояснение.

Но почти всегда вопросы не связаны между собой, поэтому методом исключения их можно решить.
swiftui_moonshot_quiz.png
1 MB
Прикладываю полный список ответов
Я использую Toggl Track (https://toggl.com) для отслеживания времени и применяю его в режиме Помодоро (там есть такая функция).

На iPhone уведомления работают не идеально - иногда не приходят на часы напоминая о перерыве. Но на десктопе всё работает как часы - стоп, ведь этот трекер и есть часы 😁

Когда искал настройки, случайно наткнулся на список лицензий и был приятно удивлён - среди них оказался https://github.com/twostraws/CodeScanner, автором которого является создатель курса #hackingwithswift!
👍1🔥1👀1
Всем привет 👋

Вчера я прошёл 2 урока из 4 по Проекту 9, в котором автор знакомит нас с навигацией используя NavigationStack подробнее.

Начнем с проблемы:

NavigationStack {
NavigationLink("Tap Me") {
Text("Detail View")
}
}

Данный код создаёт Text(“Detail View”) независимо от того кликнул пользователь на Tap Me. Мне не понятно зачем такая функциональность вообще существует, т.к. это легко приводит к лишним действиям и проблемам с производительностью (особенно в руках новичков). Более того, когда это может оказаться полезным - большой вопрос.
Я бы подразумевал, что {} в NavigationLink это лямбда, которая вызывается по необходимости.

Как нужно делать правильно?

Чтобы дочерние View создавались лениво, следует использовать navigationDestination


struct ContentView: View {
@State private var path = [Int]()

var body: some View {
NavigationStack(path: $path) {
VStack {
Button("Show 32") {
path = [32]
}
Button("Show 64") {
path.append(64)
}
Button("Show 32 then 64") {
path = [32, 64]
}
}
.navigationDestination(for: Int.self) { selection in
Text("You selected \(selection)")
}
}
}
}

В данном примере автор показывает как использовать path на основе массива, но так же есть NavigationPath. Выглядит это круто, и программная навигация реализуется довольно таки просто

Урок доступен тут https://www.hackingwithswift.com/100/swiftui/43

#hackingwithswift
Please open Telegram to view this post
VIEW IN TELEGRAM
👏2🔥1
Всем привет, был немного в разъездах. Возвращаюсь с очередным отчётом:

Закончил изучение Проекта 9 🎆
Почему этот набор уроков называется Проектом я не понял. По итогу мы не сделали приложение, поэтому показывать нечего 🗿

Но главное, что я постиг азы навигации. В моём приложении они понадобятся, поэтому я рад этому вдвойне!

На этот раз я пропущу челендж - хочу поскорее приступить к следующему разделу, который посвящён Data.
Раздел, который имет самое большое значение в моём проекте по технической составляющей (так я это вижу на данный момент, возможно при реализации это окажется не так).

Кстати, это уже почти экватор! Отпразнуем лайком? 🥳
Please open Telegram to view this post
VIEW IN TELEGRAM
🎉2👍11