Kotlin/Swift (iOS) Туда и Обратно
36 subscribers
130 photos
21 videos
9 files
88 links
Канал - журнал, рассказывающий об опыте изучения Swift & iOS backend-разработчиком на Java & Kotlin
Download Telegram
Сегодня - день 25, а это значит, что четверть пути позади 🎆🎆🎆 Ура товарищи!

Задание было довольно интересным: нужно было сгенерировать условия для игрока.

1️⃣ Выбрать случайную фигуру.
2️⃣ Определить, кто должен быть в паре — победитель или проигравший.
3️⃣ Предложить игроку выбрать правильную фигуру.

Например:
Генерируется Бумага, а задача - найти фигуру, которая ей проигрывает.
Правильный ответ - Камень 🤘
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3
PaperScissorsRock.png
4.3 MB
Определение пары далеко не оптимально, каюсь, но фокус сейчас другой 😋
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2
Всем привет 👋

После дня отдыха (на самом деле ревью и рефлексии о том что сделано), я снова рвусь к знаниям 🏃‍♂️

Сегодняшний урок ничем особо не выдавался: работа с датами и селекторами для чисел.
НО! Мы неожиданно перешли к тренировке своей модельки ML… Поражает насколько просто это делается. И интересно, можно ли использовать модели сделанные на Python 👩‍💻 На первый взгляд этому ничего не мешает, если типы моделек совместимы #todo

Дальше будем ее использовать для предсказания… 🔮🧙‍♀️
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3👀1
Сегодня я вновь попробовал решить ежедневную задачу на leetcode 👩‍💻 используя Swift 👩‍💻
Почему у строки нельзя взять символ по индексу? 🤔

class Solution {
func areAlmostEqual(_ s1: String, _ s2: String) -> Bool {
var diffIndices = [Int]()
let s1AsArr = Array(s1)
let s2AsArr = Array(s2)
for i in 0..<s1.count where s1AsArr[i] != s2AsArr[i] {
diffIndices.append(i)
}

if diffIndices.count == 0 {
return true
}
if diffIndices.count > 2 || diffIndices.count == 1 {
return false
}
return s1AsArr[diffIndices[0]] == s2AsArr[diffIndices[1]] && s1AsArr[diffIndices[1]] == s2AsArr[diffIndices[0]]
}
}

А вот for i in range where condition выглядит классно 💪

Канонично ли так использовать Swift?
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Прошёл замечательный урок, демонстрирующий мощный инструмент ML.
Первая ошибка в тесте 😅

Попробуйте ответить: всегда ли в сутках 86400 секунд, и если нет, то когда это не так?

#hackingwithswift
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1🔥1🤔1
Ещё была такая вещь:
"^[\(coffeeAmount) cup](inflect: true)" превращающая cup в cups если coffeeAmount > 1
Почему-то у меня сработало только для английских слов 🤔

Был удивлён, что работает это на основе Markdown
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1👀1
Проект 5

Игра Word Scramble, где пользователю предлагается составить слова из случайно выбранного слова. Например: для слова человек подходят варианты, чело, век, вол, волк и так далее

Темы
🟢 List как элемент SwiftUI, позволяющий отображать список View
🟢 onAppear - действие, которое выполняется при показе View. Пока не знаю как оно реагирует на изменение View.
🟢 fatalError - возможность закрашить приложение при неразрешимой ситуации
🟢 UITextChecker - проверка слова на корректность в смысле правописания.
Применяется оно так:

func isReal(word: String) -> Bool {
let checker = UITextChecker()
let range = NSRange(location: 0, length: word.utf16.count)
let misspelledRange = checker.rangeOfMisspelledWord(in: word, range: range, startingAt: 0, wrap: false, language: "en")

return misspelledRange.location == NSNotFound
}

Выглядит, конечно, так себе. Но подозреваю я ещё увижу немало подобного кода, из-за поддержки Objective-C
🟢 Подгрузка файлов из Bundle
🟢 Бонусом было добавление элемента в список (List) используя анимацию

#hackingwithswift обещает, что это был послендний “простой” проект, но меня после ML будет сложно удивить 😎
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
И снова я отличник 5️⃣
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Оказывается, что в alert необязательно добавлять кнопку Ok, SwiftUI 👶 добавит её за нас. Пишем просто пустые {}

.alert(errorTitle, isPresented: $showingError) { } message: {
Text(errorMessage)
}
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Выходные не проходят зря и сегодня я знакомлюсь с анимацией 👋


struct ContentView: View {
@State private var animationAmount = 1.0

var body: some View {
Button("Tap Me") {
}
.padding(50)
.foregroundStyle(.white)
.background(Color.blue)
.clipShape(.circle)
.overlay {
Circle()
.stroke(.black)
.scaleEffect(animationAmount)
.opacity(2 - animationAmount)
.animation(.easeInOut(duration: 1).repeatForever(autoreverses: false), value: animationAmount)

}
.onAppear {
animationAmount = 2
}
}
}


Удивляет с какой простотой достигаются красивые эффекты. Напоиманает чем-то css 👩‍💻
Кто у кого списывал? 🤔
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
А вот анимирование биндингов (bindings) взрывает мой проц 🤯

Stepper("Scale amount", value: $animationAmount.animation(
.easeInOut(duration: 1)
.repeatCount(3, autoreverses: true)
), in: 1...10)

Как утверждает автор, такую анимацию можно сделать и для Boolean значений.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
Давайте посмотрим как оно работает с Boolean

struct ContentView: View {
@State private var isOn = false

var body: some View {
VStack {
Toggle(isOn: $isOn.animation(.easeInOut(duration: 0.5))) {
Label {
Text("Show Button")
} icon: {}
}
.padding()
Button("Circle Button") {
}
.padding(50)
.foregroundStyle(.white)
.background(Color.blue)
.clipShape(.circle)
.opacity(isOn ? 1 : 0)
}
}
}
🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
🤩🤩🤩
Кто-нибудь расскажите мне как это работает… как кнопка рисуется анимировано?
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
Я думаю достаточно на сегодня постов. Мне нужна передышка 😅
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