Когда я решил изучить Swift & SwiftUI, я и не предполагал, что это будет отличной возможностью попробовать не только новые технологии, но и техники, о которых я многое слышал, но так и не решался применить в работе.
Уже 5 учебных дней я пытаюсь дробить обучение на 25 минутные интервалы, используя технику Помодорро 🍅
25 минутный интервал требует полной концентрации, но достигается это пока с трудом. Несмотря на это, бывает порой трудно прерваться, но делать это всё же приходится.
5 минутные интервалы отдыха я использую более эффективно, т.к. в это время я должен себя чем-то занять. Поэтому я либо пью воду, либо разминаюсь, отжимаюсь, или просто хожу.
До 30 минутного перерыва дело либо не доходило, либо на нем всё и заканчивалось😃
В дальнейшем, когда мы доберемся до тестирования, я хочу попробовать TDD (Test Driven Development). Надеюсь, эта практика хорошо подходит для UI приложений, таких как SwiftUI.
Если использовали Помодорро, поделитесь своим опытом☺️
Уже 5 учебных дней я пытаюсь дробить обучение на 25 минутные интервалы, используя технику Помодорро 🍅
25 минутный интервал требует полной концентрации, но достигается это пока с трудом. Несмотря на это, бывает порой трудно прерваться, но делать это всё же приходится.
5 минутные интервалы отдыха я использую более эффективно, т.к. в это время я должен себя чем-то занять. Поэтому я либо пью воду, либо разминаюсь, отжимаюсь, или просто хожу.
До 30 минутного перерыва дело либо не доходило, либо на нем всё и заканчивалось
В дальнейшем, когда мы доберемся до тестирования, я хочу попробовать TDD (Test Driven Development). Надеюсь, эта практика хорошо подходит для UI приложений, таких как SwiftUI.
Если использовали Помодорро, поделитесь своим опытом
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2👏1
Пройдёмся по основным темам урока
🟢 Отрисовка Image используя различные стратегии:
🟢 Скроллинги - вертикальные, горизонтальные, ленивые и нет.
🟢
Помнится когда я пробовал это на Android👩💻 , переходы между 👩💻 это делает предельно просто!
🟢
По своей сути это:
В нашем случае мы использовали его для работы с JSON
🟢
Урок очень полезный, пригодится мне в дальнейшем без сомнений!🤩
#hackingwithswift
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!
На iPhone уведомления работают не идеально - иногда не приходят на часы напоминая о перерыве. Но на десктопе всё работает как часы - стоп, ведь этот трекер и есть часы 😁
Когда искал настройки, случайно наткнулся на список лицензий и был приятно удивлён - среди них оказался https://github.com/twostraws/CodeScanner, автором которого является создатель курса #hackingwithswift!
👍1🔥1👀1
Всем привет 👋
Вчера я прошёл 2 урока из 4 по Проекту 9, в котором автор знакомит нас с навигацией используя
Начнем с проблемы:
Данный код создаёт
Я бы подразумевал, что
Как нужно делать правильно?
Чтобы дочерние View создавались лениво, следует использовать
В данном примере автор показывает как использовать path на основе массива, но так же есть
Урок доступен тут https://www.hackingwithswift.com/100/swiftui/43
#hackingwithswift
Вчера я прошёл 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🎆
Почему этот набор уроков называется Проектом я не понял. По итогу мы не сделали приложение, поэтому показывать нечего🗿
Но главное, что я постиг азы навигации. В моём приложении они понадобятся, поэтому я рад этому вдвойне!
На этот раз я пропущу челендж - хочу поскорее приступить к следующему разделу, который посвящён
Раздел, который имет самое большое значение в моём проекте по технической составляющей (так я это вижу на данный момент, возможно при реализации это окажется не так).
Кстати, это уже почти экватор! Отпразнуем лайком?🥳
Закончил изучение Проекта 9
Почему этот набор уроков называется Проектом я не понял. По итогу мы не сделали приложение, поэтому показывать нечего
Но главное, что я постиг азы навигации. В моём приложении они понадобятся, поэтому я рад этому вдвойне!
На этот раз я пропущу челендж - хочу поскорее приступить к следующему разделу, который посвящён
Data
.Раздел, который имет самое большое значение в моём проекте по технической составляющей (так я это вижу на данный момент, возможно при реализации это окажется не так).
Кстати, это уже почти экватор! Отпразнуем лайком?
Please open Telegram to view this post
VIEW IN TELEGRAM
🎉2👍1 1
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2 1
Приветствую 👋
Сегодня посмотрел видео (оно входит в 100 дневный курс) https://www.youtube.com/watch?v=U1gP4EcT_wQ
Формат очень интересный, на примере “Зведные Войны” рассказываются определенные аспекты программирования, в частности на Swift👩💻
На скриншотах приведены основные мысли.
Если вдруг не хватает уровня английского, то у Яндекса есть технология синхронного перевода видео. Иногда сам ей пользуюсь, работает классно!
Сегодня посмотрел видео (оно входит в 100 дневный курс) https://www.youtube.com/watch?v=U1gP4EcT_wQ
Формат очень интересный, на примере “Зведные Войны” рассказываются определенные аспекты программирования, в частности на Swift
На скриншотах приведены основные мысли.
Если вдруг не хватает уровня английского, то у Яндекса есть технология синхронного перевода видео. Иногда сам ей пользуюсь, работает классно!
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
В видео приводится такой фрагмент. Он показывает, что поведение этого кода сложно описать без знания чем является
Как хорошо, что у нас есть IDE🤩
Target
, классом или структурой.Как хорошо, что у нас есть IDE
Please open Telegram to view this post
VIEW IN TELEGRAM
Просмотра видео, конечно, недостаточно. Нужно скорее изучать следующие темы!
Проект 10 (1/4)
Оставил у меня смешанные чувства: огорчение и восторг.
Я был полон ожидания, что в разделе Focus on data мы начнём с разбора фреймворка базы данных - Core Data. Эта тема действительна интересна для меня, возможно как для backend разработчика. Но мы начали с
🟢 http запросов.
В сравнение с Java/Kotlin - просто вау! Встроенные механизмы, которые для базовых кейсов не требуют почти никаких усилий. Когда разработчики постарались🙂
Насколько мне удалось нагуглить, для любителей перекладывать байтики, инструменты в виде IntputStream/OutputStream имеются😎
🟢 Асинхронная загрузка изображений. Тут дело сложнее чем с обычными картинками, т.к. SwiftUI заранее не знает, какими атрибутами обладает загружаемая картинка. Но мы можем подсказать.
🟢 Disabling Forms. Это совсем не то, что можно ожидать в разделе Focus on Data 🫠
В форме можно указать boolean выражение на секции, которое заблокирует или разрешит взаимодействие с этой секцией.
#hackingwithswift
Проект 10 (1/4)
Оставил у меня смешанные чувства: огорчение и восторг.
Я был полон ожидания, что в разделе Focus on data мы начнём с разбора фреймворка базы данных - Core Data. Эта тема действительна интересна для меня, возможно как для backend разработчика. Но мы начали с
let url = URL(string: "https://itunes.apple.com/search?term=taylor+swift&entity=song")
let (data, _) = try await URLSession.shared.data(from: url)
В сравнение с Java/Kotlin - просто вау! Встроенные механизмы, которые для базовых кейсов не требуют почти никаких усилий. Когда разработчики постарались
Насколько мне удалось нагуглить, для любителей перекладывать байтики, инструменты в виде IntputStream/OutputStream имеются
Section {
Button("Create account") {
print("Creating account…")
}
}
.disabled(username.isEmpty || email.isEmpty)
В форме можно указать boolean выражение на секции, которое заблокирует или разрешит взаимодействие с этой секцией.
#hackingwithswift
Please open Telegram to view this post
VIEW IN TELEGRAM
Чем дальше, тем больше хочу погрузиться в мир мобильной разработки! 💪
Please open Telegram to view this post
VIEW IN TELEGRAM
🆒2
Антиреклама Xcode
Ожидается, что на симуляторе и превью будет одинаковый контент. Куда пропали остальные секции Пол тоже не знает…😄
Ожидается, что на симуляторе и превью будет одинаковый контент. Куда пропали остальные секции Пол тоже не знает…
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1😱1 1
Недавно я хвалил разработчиков за URLSession, но сегодня случай другой.
Допустим, нам нужно создать JSON, но при этом заменить имена полей на кастомные. В
Это выглядит громоздко, и если мы посмотрим на class + Observable, то поля с подчёркиванием ещё больше усложняют восприятие
В
Допустим, нам нужно создать JSON, но при этом заменить имена полей на кастомные. В
Swift
для этого используется специальный enum CodingKeys: String, CodingKey
:
struct Landmark: Codable {
var name: String
var foundingYear: Int
var location: Coordinate
var vantagePoints: [Coordinate]
enum CodingKeys: String, CodingKey {
case name = "title"
case foundingYear = "founding_date"
case location
case vantagePoints
}
}
Это выглядит громоздко, и если мы посмотрим на class + Observable, то поля с подчёркиванием ещё больше усложняют восприятие
@Observable
class User: Codable {
enum CodingKeys: String, CodingKey {
case _name = "name"
}
var name = "Taylor"
}
В
Kotlin
это делается существенно лаконичнее:
import com.fasterxml.jackson.annotation.JsonProperty
data class Landmark(
@JsonProperty("title") val name: String,
@JsonProperty("founding_date") val foundingYear: Int,
val location: Coordinate,
val vantagePoints: List<Coordinate>
)
@JsonProperty
является аннотацией, которая доступна в рантайм, являющаяся по сути мета информацией к типу Landmark. Библиотека fasterxml использует её при сериализации.👍1
Для
Swift
есть решение похожее на fasterxml
- https://github.com/GottaGetSwifty/CodableWrappers
@CustomCodable @SnakeCase
struct User: Codable {
let firstName: String
let lastName: String
@SecondsSince1970DateCoding
var joinDate: Date
@CustomCodingKey("data")
var imageData: Data
}
👍1
Проект 10
Закончен.
Повторюсь, мне он показался странным. Не то, что я ожидал увидеть.
Я так и не понял зачем был урок про haptic effects - тактильные ощущения, которые создаются с помощью вибрации телефона, причем только на телефоне эта функциональность доступна. В проекте мы это не применяли.
Проект был про приложение для заказа кексиков.
По функционалу состоит из формы и её валидации, асинхронной загрузки картинки, нескольких экранов и отправки http запросов с json на сервер.
Едем дальше🚗
Закончен.
Повторюсь, мне он показался странным. Не то, что я ожидал увидеть.
Я так и не понял зачем был урок про haptic effects - тактильные ощущения, которые создаются с помощью вибрации телефона, причем только на телефоне эта функциональность доступна. В проекте мы это не применяли.
Проект был про приложение для заказа кексиков.
По функционалу состоит из формы и её валидации, асинхронной загрузки картинки, нескольких экранов и отправки http запросов с json на сервер.
Едем дальше
Please open Telegram to view this post
VIEW IN TELEGRAM