У этого метода такая сигнатура:
Почему
Я бы еще понял
Хотя самый понятный вариант:
nonisolated public func alert<A, M>(_ titleKey: LocalizedStringKey, isPresented: Binding<Bool>, @ViewBuilder actions: () -> A, @ViewBuilder message: () -> M) -> some View where A : View, M : View
Почему
actions
можно писать без имени, а message
указывать обязательно?Я бы еще понял
alert(...) {} {}
или alert(…) actions: {} message: {}
, но alert(…) {} message: {}
🤔Хотя самый понятный вариант:
alert(…, actions: {}, message: {})
👍2
Это называется trailing closure syntax, у hackingwithswift рассказывалось про это, но насколько помню, не было примеров, когда были ещё аргументы после
К слову в Kotlin👩💻 есть похожий синтаксис, но там только последний параметр-функцию можно записать как
invoke(a: “”, b: “”) { } someAction : { }
К слову в Kotlin
someFunction(arg1, arg2) { }
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Проект 2:
Предлагается реализация игры, в которой пользователю нужно выбирать правильный флаг страны.
Самостоятельно в рамках челенджа предлагалось реализовать обработку конца игры
Что узнал:
🟢 SwiftUI базируется на состоянии, а не на событиях. Например для показа alert используется флаг (показывать или нет) вместо привычного в ООП
🟢 С помощью обычных градиентов можно получить неплохой дизайн
🟢 Как работают шрифты
🟢 В Xcode есть специальный тул, позволяющий протестировать шрифты динамически
🟢 Подгрузка картинок из
Всё сделал, всё получилось! И выглядит замечательно😊
#hackingwithswift
Предлагается реализация игры, в которой пользователю нужно выбирать правильный флаг страны.
Самостоятельно в рамках челенджа предлагалось реализовать обработку конца игры
Что узнал:
alert.show()
Assets
Всё сделал, всё получилось! И выглядит замечательно
#hackingwithswift
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3👏1
Проект 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
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4
Сегодня - день 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
Дальше будем ее использовать для предсказания… 🔮🧙♀️
После дня отдыха (на самом деле ревью и рефлексии о том что сделано), я снова рвусь к знаниям
Сегодняшний урок ничем особо не выдавался: работа с датами и селекторами для чисел.
НО! Мы неожиданно перешли к тренировке своей модельки ML… Поражает насколько просто это делается. И интересно, можно ли использовать модели сделанные на Python
Дальше будем ее использовать для предсказания… 🔮
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3👀1
Сегодня я вновь попробовал решить ежедневную задачу на leetcode 👩💻 используя Swift 👩💻
Почему у строки нельзя взять символ по индексу?🤔
А вот
Канонично ли так использовать 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
Первая ошибка в тесте
Попробуйте ответить: всегда ли в сутках 86400 секунд, и если нет, то когда это не так?
#hackingwithswift
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1🔥1🤔1
Ещё была такая вещь:
"
Почему-то у меня сработало только для английских слов🤔
Был удивлён, что работает это на основе Markdown
"
^[\(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
🟢
🟢
🟢
Применяется оно так:
Выглядит, конечно, так себе. Но подозреваю я ещё увижу немало подобного кода, из-за поддержки
🟢 Подгрузка файлов из
🟢 Бонусом было добавление элемента в список (List) используя анимацию
#hackingwithswift обещает, что это был послендний “простой” проект, но меня после ML будет сложно удивить😎
Игра Word Scramble, где пользователю предлагается составить слова из случайно выбранного слова. Например: для слова человек подходят варианты, чело, век, вол, волк и так далее
Темы
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
#hackingwithswift обещает, что это был послендний “простой” проект, но меня после ML будет сложно удивить
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
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
Выходные не проходят зря и сегодня я знакомлюсь с анимацией 👋
Удивляет с какой простотой достигаются красивые эффекты. Напоиманает чем-то css👩💻
Кто у кого списывал?🤔
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) взрывает мой проц 🤯
Как утверждает автор, такую анимацию можно сделать и для Boolean значений.
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