- 203
- 408 891
В’ячеслав Білий
Ukraine
Приєднався 1 лют 2012
Ласкаво просимо на наш канал UA-cam! Тут ви знайдете навчальні відео, присвячені програмуванню на Swift та розробці додатків для iOS. Наша мета - допомогти людям пройти шлях від початківця-розробника до оплачуваного фахівця.
Ми пропонуємо зрозумілі уроки, практичні завдання та корисні поради, щоб ви могли розширити свої знання в галузі розробки програмного забезпечення. Вивчайте основи Swift, вдосконалюйте навички проектування і розробки додатків для iOS, а також дізнавайтесь про найновіші тенденції та кращі практики у світі мобільної розробки.
Приєднуйтесь до нас і станьте експертом у сфері програмування для iOS! Ми впевнені, що разом з нами ви зможете досягти великих успіхів у цій захоплюючій галузі. Підписуйтесь на наш канал, не пропускайте нові відео та долучайтесь до спільноти розробників, які навчаються разом з нами.
Почніть свій шлях до професійного розробника вже зараз!
Ми пропонуємо зрозумілі уроки, практичні завдання та корисні поради, щоб ви могли розширити свої знання в галузі розробки програмного забезпечення. Вивчайте основи Swift, вдосконалюйте навички проектування і розробки додатків для iOS, а також дізнавайтесь про найновіші тенденції та кращі практики у світі мобільної розробки.
Приєднуйтесь до нас і станьте експертом у сфері програмування для iOS! Ми впевнені, що разом з нами ви зможете досягти великих успіхів у цій захоплюючій галузі. Підписуйтесь на наш канал, не пропускайте нові відео та долучайтесь до спільноти розробників, які навчаються разом з нами.
Почніть свій шлях до професійного розробника вже зараз!
Git №5 - Merge Conflicts | Їх не треба боятися, їх треба вирішувати!
#xcode #git #merge #meconflict
У відео ми досліджуємо ази вирішення конфліктів при роботі з Git. Від початкових налаштувань і роботи з комітами до розв'язання конфліктів в різних сценаріях, включаючи роботу зі Storyboard та GitHub Pull Requests. Дізнайтеся, як ефективно вирішувати конфлікти і підвищуйте свої навички у використанні Git. Подивіться наші висновки для короткого огляду ключових моментів.
Приєднуйтесь до спілкування!
Телеграмм канал: t.me/bwswift
Телеграмм чат: t.me/bwswiftchat
Підтримайте канал на патріоні!
www.patreon.com/bwswift
GitHub iOS Roadmap, поставте зірочку:
github.com/viacheslavbilyi/iOS-Roadmap
Miro iOS Roadmap:
miro.com/app/board/uXjVMPVvQ1U=/
00:00 Початок
01:05 Налаштування MergeTool
06:32 Коміти в Deatached HEAD
09:10 Перший Merge Conflict
11:20 Виправлення конфлікта руками
16:00 Виправлення конфлікта в FileMerge
22:10 Вирішення конфлікта в Fork
24:20 Створення Storyboard проекту
26:25 Розбираєм структуру Storyboard
29:10 Вирішення Merge Conflict в Storyboard - новий екран
35:40 Вирішення Merge Conflict в Storyboard - constraints
41:40 Вирішення Merge Conflict в Storyboard - нові елементи
46:30 Merge Conflict в файлі проекту - нові файли
53:50 Pull Request та вирішення конфлікта на GitHub
01:03:50 Merge Conflict в файлі проекту - нові групи
01:21:06 Merge Conflict в файлі проекту в terminal
01:31:15 Висновки
Додавайтесь в соц мережах:
LinkedIn - www.linkedin.com/in/slavabeliy/
Twitter - VycheslavBeliy
Facebook - profile.php?id=100001773204511
Instagram - bilyi_viacheslav
У відео ми досліджуємо ази вирішення конфліктів при роботі з Git. Від початкових налаштувань і роботи з комітами до розв'язання конфліктів в різних сценаріях, включаючи роботу зі Storyboard та GitHub Pull Requests. Дізнайтеся, як ефективно вирішувати конфлікти і підвищуйте свої навички у використанні Git. Подивіться наші висновки для короткого огляду ключових моментів.
Приєднуйтесь до спілкування!
Телеграмм канал: t.me/bwswift
Телеграмм чат: t.me/bwswiftchat
Підтримайте канал на патріоні!
www.patreon.com/bwswift
GitHub iOS Roadmap, поставте зірочку:
github.com/viacheslavbilyi/iOS-Roadmap
Miro iOS Roadmap:
miro.com/app/board/uXjVMPVvQ1U=/
00:00 Початок
01:05 Налаштування MergeTool
06:32 Коміти в Deatached HEAD
09:10 Перший Merge Conflict
11:20 Виправлення конфлікта руками
16:00 Виправлення конфлікта в FileMerge
22:10 Вирішення конфлікта в Fork
24:20 Створення Storyboard проекту
26:25 Розбираєм структуру Storyboard
29:10 Вирішення Merge Conflict в Storyboard - новий екран
35:40 Вирішення Merge Conflict в Storyboard - constraints
41:40 Вирішення Merge Conflict в Storyboard - нові елементи
46:30 Merge Conflict в файлі проекту - нові файли
53:50 Pull Request та вирішення конфлікта на GitHub
01:03:50 Merge Conflict в файлі проекту - нові групи
01:21:06 Merge Conflict в файлі проекту в terminal
01:31:15 Висновки
Додавайтесь в соц мережах:
LinkedIn - www.linkedin.com/in/slavabeliy/
Twitter - VycheslavBeliy
Facebook - profile.php?id=100001773204511
Instagram - bilyi_viacheslav
Переглядів: 883
Відео
Git №4 - Галуження в Git | Зливання гілок, що може бути складніше?
Переглядів 9769 місяців тому
#swiftui У цьому відео ми докладно розглянемо вс аспекти галуження в Git, починаючи з основ та завершуючи першим pull request. Ми розглянемо так питання, як відокремлення гілок, коміти, галуження та зливання, віддален гілки та багато іншого. Для зручност ви можете використовувати тайм-коди нижче, щоб перейти безпосередньо до цікавого вас розділу: 00:00 Початок 02:00 Git Fork 07:00 Галуження, пе...
Git №3 - Робота з віддаленим репозиторієм | GitHub, ssh, tags
Переглядів 6099 місяців тому
#git #github #ssh У цьому відео ми детально розглянемо процес роботи з віддаленим репозиторієм. Вивчимо, як налаштувати з'єднання за допомогою протоколу SSH на платформ GitHub, а також як працювати з тегами (tags) для позначення важливих моментів у вашому проекті. Розкриємо найкращ практики та поділимося корисними порадами для ефективної роботи з Git. Не пропустіть цей інформативний урок! Приєд...
Git №2 - Робота с терміналом | Відчуй себе справжнім PRO
Переглядів 1 тис.9 місяців тому
#git #terminal У цьому відео ми зануримося у захопливий світ контролю версій за допомогою Git та опануємо основи роботи з терміналом. Приєднуйтесь до спілкування! Телеграмм канал: t.me/bwswift Телеграмм чат: t.me/bwswiftchat Підтримайте канал на патріоні! www.patreon.com/bwswift 00:00 Початок 02:05 Перш команди 04:10 Налаштування терміналу 15:45 Створення git репозиторія 22:50 Робота з vim 27:4...
Git №1 - Знайомство та перший репозиторій | Чому Git краще за інших?
Переглядів 1,4 тис.10 місяців тому
#git Ми введемо вас у світ Git - найпопулярнішу систему керування версіями. Ви дізнаєтеся, що таке Git як його встановити, а також з'ясуєте, чому Git виділяється серед інших рішень завдяки своїм розподіленим можливостям, неймовірній швидкост та зручному управлінню гілками. Приєднуйтеся до нас, щоб освоїти цей потужний інструмент дізнатися, чому Git є найкращим вибором для управління версіями ...
SwiftUI №10 - Відображення та редагування юзер профайла | Секрет оновлення даних пачкою!
Переглядів 1,1 тис.10 місяців тому
#swiftUI Приєднуйтесь до спілкування! Телеграмм канал: t.me/bwswift Телеграмм чат: t.me/bwswiftchat Підтримайте канал на патріоні! www.patreon.com/bwswift Підтримайте канал на BuyMeACoffe! www.buymeacoffee.com/bwswift GitHub iOS Roadmap, поставте зірочку: github.com/viacheslavbilyi/iOS-Roadmap Miro iOS Roadmap: miro.com/app/board/uXjVMPVvQ1U=/ 00:00 Початок 01:00 Анонс GPT 02:14 Зміст 03:20 Pro...
SwiftUI №9 - Компановані інтерфейси | Роби як Apple, але не зовсім!
Переглядів 1,5 тис.Рік тому
#swiftUI Приєднуйтесь до спілкування! Телеграмм канал: t.me/bwswift Телеграмм чат: t.me/bwswiftchat Підтримайте канал на патріоні! www.patreon.com/bwswift Підтримайте канал на BuyMeACoffe! www.buymeacoffee.com/bwswift GitHub iOS Roadmap, поставте зірочку: github.com/viacheslavbilyi/iOS-Roadmap Miro iOS Roadmap: miro.com/app/board/uXjVMPVvQ1U=/ 00:00 Початок 01:48 Глава 3 5:30 Category enum 9:30...
Apple Vision Pro - деталі на які ніхто не звернув увагу!
Переглядів 1,3 тис.Рік тому
#visionpro #vr #ar Ви готов до глибокого розкриття світу Apple Vision Pro? У цьому відео розкажу вам все про ц окуляри, від оновлень до додатків та можливостей. Звісно що БЕЗ особистих враженнь після шости годин в Купертіно :) бо це заборонено. Ви дізнаєтеся, на що треба звернути увагу, від жестів до технології охолодження. Розкриємо вс таємниці, включаючи AR та приватність використання окулярі...
Code Review проекта | Пиши проекти так, щоб тебе памʼятали!
Переглядів 1,8 тис.Рік тому
#swift #uikit #codereview Сьогодн у нас особливий випуск, де ми зануримось у світ Code Review. Я покажу вам, як уникнути найпоширеніших помилок, як роблять розробники та як створити проект, який залишить незабутнє враження. Підготуйтеся до поглибленого аналізу корисних порад. - Ретельний огляд найпоширеніших помилок у проектах. - Докладний аналіз кожної помилки та її вплив на якість коду. - Ко...
Принципи чистого коду і SOLID | Ти б не пройшов співбесіду!
Переглядів 4,8 тис.Рік тому
#swift #oop #solid У цьому відео ми докладно розглянемо низку основних принципів програмування, як допоможуть вам створювати чистий підтримуваний код. Почнемо ми з загальних принципів інженерії програмного забезпечення, а потім перейдемо до SOLID - п'яти основних принципів об'єктно-орієнтованого програмування. Приєднуйтесь до спілкування! Телеграмм канал: t.me/bwswift Телеграмм чат: t.me/bwswi...
Знайомство з каналом, автором та проектом!
Переглядів 1,9 тис.Рік тому
#swiftUI #swift #ios Приєднуйтесь до спілкування! Телеграмм канал: t.me/bwswift Телеграмм чат: t.me/bwswiftchat Підтримайте канал на патріоні! www.patreon.com/bwswift GitHub iOS Roadmap, поставте зірочку: github.com/viacheslavbilyi/iOS-Roadmap Miro iOS Roadmap: miro.com/app/board/uXjVMPVvQ1U=/ Додавайтесь в соц мережах: LinkedIn - www.linkedin.com/in/slavabeliy/ Twitter - VycheslavB...
iOS Roadmap - з нуля до Тех Ліда | Що потрібно знати iOS розробнику на кожному рівні?
Переглядів 5 тис.Рік тому
iOS Roadmap - з нуля до Тех Ліда | Що потрібно знати iOS розробнику на кожному рівні?
SwiftUI №8 - Анімація, Транзішини, Metal | Не роби як Apple рекомендує!
Переглядів 1,6 тис.Рік тому
SwiftUI №8 - Анімація, Транзішини, Metal | Не роби як Apple рекомендує!
SwiftUI №7 - Малюємо кастомні View за допомогою Path та GeometryReader | Що Apple робить не так?
Переглядів 1,6 тис.Рік тому
SwiftUI №7 - Малюємо кастомн View за допомогою Path та GeometryReader | Що Apple робить не так?
SwiftUI №6 - Observable макро чи StateObject, Binding, Environment vs EnvironmentObject, занурюємось
Переглядів 2,5 тис.Рік тому
SwiftUI №6 - Observable макро чи StateObject, Binding, Environment vs EnvironmentObject, занурюємось
SwiftUI №5 - Навігація в iOS | Як треба і не треба робити
Переглядів 2,9 тис.Рік тому
SwiftUI №5 - Навігація в iOS | Як треба не треба робити
SwiftUI №4 - List View та дата мапінг | Що рекомендує Apple?
Переглядів 2,6 тис.Рік тому
SwiftUI №4 - List View та дата мапінг | Що рекомендує Apple?
SwiftUI №3 - Всього по трошки | Це не влізе в голову з першого разу!
Переглядів 2,7 тис.Рік тому
SwiftUI №3 - Всього по трошки | Це не влізе в голову з першого разу!
SwiftUI №2 - занурюємось під капот | що не так зі Stack View?
Переглядів 3,1 тис.Рік тому
SwiftUI №2 - занурюємось під капот | що не так з Stack View?
SwiftUI - епічний початок, перший проект та знайомство з Xcode | Старт великої подорожі №1
Переглядів 8 тис.Рік тому
SwiftUI - епічний початок, перший проект та знайомство з Xcode | Старт великої подорож №1
№39 - Opaque Types в Swift | Не костыль а фича? И причем тут SwiftUI
Переглядів 4,2 тис.Рік тому
№39 - Opaque Types в Swift | Не костыль а фича? И причем тут SwiftUI
№38 - Обработка ошибок в Swift | Работай с Error как ПРО!
Переглядів 4,2 тис.Рік тому
№38 - Обработка ошибок в Swift | Работай с Error как ПРО!
№37 - Generics в Swift | Прошел этого босса прошел Swift!
Переглядів 10 тис.Рік тому
№37 - Generics в Swift | Прошел этого босса прошел Swift!
№36 - Delegate в Swift | Главный паттерн в iOS?
Переглядів 9 тис.Рік тому
№36 - Delegate в Swift | Главный паттерн в iOS?
№35 - Все что нужно знать об ARC в Swift | На курсах такого не расскажут
Переглядів 19 тис.Рік тому
№35 - Все что нужно знать об ARC в Swift | На курсах такого не расскажут
№34 - Протоколы в Swift | Испытание твоего разума
Переглядів 9 тис.Рік тому
№34 - Протоколы в Swift | Испытание твоего разума
№33 - Extensions в swift | Что от вас скрывают!?
Переглядів 4,7 тис.Рік тому
№33 - Extensions в swift | Что от вас скрывают!?
Занятие 32 - Деинициализация | Что может быть проще?
Переглядів 2,6 тис.Рік тому
Занятие 32 - Деинициализация | Что может быть проще?
Собеседование iOS разработчика | Вопросы Джуниору: Основы Swift, UIKit, Архитектура
Переглядів 16 тис.Рік тому
Собеседование iOS разработчика | Вопросы Джуниору: Основы Swift, UIKit, Архитектура
Занятие 31 - Инициализация в структурах и классах | Основы
Переглядів 7 тис.Рік тому
Занятие 31 - Инициализация в структурах и классах | Основы
огромное вам спасибо! очень круто все объясняете!
Супер
He is the best lector among Russian lectors in IOS field. Tanks a bunch Vecheslav))
крутой формат 👍 Спасибо за видос
😢
Здравствуйте Вячеслав! Видеоурок вышел просто супер, спасибо за объемную информацию. Вячеслав, хотел уточнить, можно ли получить презентации с ваших видеоуроков? Было бы очень круто.
Дуже дуже дуже дуже дуже дуже дякуууууууууууую!!!!!!!!!!!!
Дякую)
Добрый день! Очень нравится ваш контент! Только я из Казахстана и не понимаю украинский(( Можете добавить субтитры пожалуйста
Try to use autogenerated subtitles
Дякую. Дуже приємно чути пояснення на українській мові 👍
українською* :)
💙💛
Понимаете что я написал? Вот тоже самое вижу на видео
Ратоаоаалоа
Вячеслав, в подтеме нарушение инкапсуляции не понял зачем в методе setClassProperty еще раз инициализируем класс SomePublicClass, а не обращаемся к уже существующему в нашем классе экземпляру?
А зараз ти куди пропав?
Лол
Добавьте в меню альтернативу! Фильтр, v60, аэропресс. Помимо сладостей ещё хорошо иметь какие-нибудь сэндвичи, их можно прямо на месте в электрогриле жарить
Бляяя.... 😂😂😂 Чому в тебе борода та брови різного кольору?
danke
Нам лекции очень нужны! Спасибо, Вячеслав!!. Очень качественный контент! Уже жду следующий урок! Огромное спасибо!.
👍
Дякую за корисні відео! Чому вивід в консолі та в Playground відрізняються майже на 100? Яке дійсне значення? Чи можна довіряти тому що пише Playground? Дякую.
Довіряти можна
Терпимо, или кривокод?) Получилось как-то так... func fiboNum(_ num: Int, index: Int = 1, x: Int = 0, y: Int = 1) -> Int { var sum = x + y if index < num { sum = fiboNum(num, index: index + 1, x: y, y: sum) } return sum } print("\(fiboNum(10))")
Ну или так) func fibonacci(_ num: Int) -> Int { switch num { case 1: return 1 case 2...: return fibonacci(num - 1) + fibonacci(num - 2) default: return 0 } }
👍
Добрый день, Вячеслав. Долго думала писать об этом или нет, но я подумала, что нужно это сделать. Я очень сильно хочу выразить огромную благодарность за ваши учебные материалы, которые вы, как большой профессионал, давали и даете по настоящий момент. Я хочу сказать, что вы вдохновляли, давали мне силы не сдаваться на этом пути, ваши лекции сопровождали меня весь путь от создания первых переменных, заканчивая дженериками. Это был был прекрасный материал, который сопровождает меня и по сей день. Я очень долго училась и всегда везде первым источником для знаний, называю вас, потому что нет лучше материала, который вы дали и даете сейчас. Это очень тяжелей и сложный путь, который может только вызывать огромное уважение. Спасибо вам за это, я хочу, чтобы вы не теряли мотивации на своем пути и делали, только то, что вам нравится. На днях, я выхожу на стажировку в очень крупную технологическую компанию, я не могу поверить, что буду делать, то что может менять жизнь людей к лучшему. К чему я это сказала, а к тому, что это только благодаря вам, вашей подачи, вашему материалу, вашей искренности любви к преподаванию и вашей любви к делу, я все таки смогла это сделать. Спасибо вам.
❤️
Буде відос про комбайн?)
Його тут вже ховають, а ти його хочеш вчити :)
1:53:09
Вячеслав, спасибо за твой труд!!!!
Умный парень, отличная подача, грамотный русский язык и вдруг такой каминг-аут: "теперь я буду выжимать из себя смесь суржика и мовы, хотя позавчера и знать их толком не знал". Вячеслав, ну что ты, Русский язык принадлежит не Путину, это социальный клей миллионов людей с разных уголков земли. "Назло маме отморожу уши", ей богу. Надеюсь, еще услышимся и удачи во всех начинаниях
«суржик» це жива мова, наслідки русифікації. Головне щоб не собачою 🇷🇺 а Вʼячеслав як був так і залишився розумним хлопцем, відмінна подача, і чудова українська:)
Найкраще пояснення по GCD на UA-cam, яке ще досі не втрачає актуальності. Дякую Вам!
Дякую!
Вашего отца не Генадий Валентинович Писаренко зовут? Вы из Запорожья? Вы один в один похожи
Ні
Мы не можем написать class в extension потому что extension пишется для структур соответсвенно может использовать, что подходит для структур т. е. static
43:00
Дякую. Ти найкращий! Сподіваюсь буде продовження...
Обовʼязково буде
цікаво було б подивитись ще одну серію про інтеграцію SpriteKit в SwiftUI
Дуже цікаві лекції. Дякую!! Навіть якщо матеріал знаєш. Цікаво просто подивитися. Вже декілька подивився.
Дякую!
Велика дяка за вашу роботу, у цей непростий час ваші лекціі дають наснагу та зайнятість для мозку)) хотілось би звернути увагу, чи це може мені так кинулось в очі, коли ми в операторі 'if' ua-cam.com/video/pQ2FOmJLgso/v-deo.html використовували порівняння змінної 'integer' з ренжом 0...2, при написанні я не дивився на екран як пишете ви, а записав по памяті як то було коли проходили оператор Range, і в мене вишло if integer ~= 0...2 на що мені xcode видав помилку, довелося добряче зламати голову чому видало помилку, а насправді запис if 0...2 ~= integer є вірний, так як такого написання раніше в лекціях ще не було, і нажаль не було комеентарів чому треба так писати.
Я сам не знаю чого так :) не задавався таким питанням
з приводі різних превью - це до сих пір не працює в Xcode 15.4 )) навіть в цьому туторіалі вони написали, що тільки по черзі можеш дивитись) Generate previews dynamically Next, you’ll render previews of the list view for different device configurations. By default, previews render at the size of the device in the active scheme. You can render for different devices by changing the target, or by overriding the device in the canvas. You can also explore other preview variations, like device orientation.
@bwswift значить свіфт виявляється що він не строготипізований, він компілізується статично не строготипізована мова програмування загального призначення.
Він строготипізований, просто під капотом кампілятором генерується нова функція для кожного типу окремо, і в рантаймі вибирається.
Надіюсь, що виконав все правильно, але наче виглядає досить добре :) Код: class Person { var name: String var surname: String var home : Home? var saying : () -> Void = {} init(name: String, surname: String) { self.name = name self.surname = surname } convenience init() { self.init(name: "Unknown", surname: "Unknown") } convenience init(surname: String) { self.init(name: "Unknown", surname: surname) } deinit { print("I have deleted class - Person") } } // Створив почтаковий класс з функцією та параметрами // Добавив деініціалізатор та кастомні ініціалізатори // Класс Персон ссилається на cat1.name через clousure class Home { var typeofhome : String var garage : Garage? var inhabitant : Cat? init(typeofhome: String) { self.typeofhome = typeofhome } convenience init() { self.init(typeofhome: "Unknown") } deinit { print("I have deleted class - Home") } } // Створив новий класс з функцією та параметрами // Добавив деініціалізатор та кастомні ініціалізатори // Класс Cat1.home ссилається на home1 class Garage { var carplaces : Int var width : Int var height : Int var owner : Person? var inhabitant : (() -> Void)? init(carplaces: Int, width: Int, height: Int) { self.carplaces = carplaces self.width = width self.height = height } convenience init() { self.init(carplaces: 0, width: 0, height: 0) } func printsome () -> Void { print("It's a youre garage") } deinit { print("I have deleted class - Garage") } } // Створив новий класс з функцією та параметрами // Добавив деініціалізатор та кастомні ініціалізатори class Cat { var name : String var owner : Person var home : Home? var animalsVoice : (() -> Void)? init(name: String, owner: Person) { self.name = name self.owner = owner } convenience init() { self.init(name: "Unknown", owner: Person()) } deinit { print("I have deleted class - Cat") } } // Створив новий класс з функцією та параметрами // Добавив деініціалізатор та кастомні ініціалізатори class Dog { var name : String var owner : Person? var animalsVoice : (() -> Void)? var home : Home? init(name: String, owner: Person) { self.name = name self.owner = owner } convenience init() { self.init(name: "Unknown", owner: Person()) } deinit { print("I have deleted class - Dog") } } // Створив новий класс з функцією та параметрами // Добавив деініціалізатор та кастомні ініціалізатори do { var person1 = Person(name: "Max", surname: "Vazocskii") var home1 = Home(typeofhome: "Apartaments") var garage1 = Garage() var cat1 = Cat() var dog1 = Dog() person1.saying = { print(cat1.name) } cat1.home = home1 home1.garage = garage1 garage1.inhabitant = { print(dog1.name) } dog1.owner = person1 }
Як раз в тему, перед тим як зібрався переписувати свій FlowCoordinator з UIKit на SwiftUI. І окрема дяка за Солов'їну
В’ячеслав, весьма признателен за отличные уроки по Swift!
👍
👍
👍
Как,называется,ваша,профессия
Software Engineer
Доброго дня. А ви плануєте випустити продовження?
Колись.
Opaque читаєтся "опейк" ([ə'peik]) (я теж все життя читав це слово неправильно, але трошки інакше - "опак")) )
👍
1:09:58
столько нюансов, спасибо за разъяснение!
👍
зараз би біткоїн за 19 купити як декілька років тому))
Та хто зна як воно буде, можливо ще буде така можливість :)
Вуууип Бип Буп, спасибо за озвучивание анимации)
😅
Дякую за українську!
Заходьте ще :)
Дякую за анонс українською! Ваша українська супер!
❤️
круто. Дякую
👍