Косенко Данила Юрьевич (kosenko_danila) wrote,
Косенко Данила Юрьевич
kosenko_danila

Category:

Про SwiftUI

Как я уже ранее писал, начальство выдало макбук и айпад, а я пишу программу на SwiftUI. Прекрасный лаконичный язык для создания простых вещей. Как только надо что-то особенное, тут же приходится переключаться на UIKit, на котором врагу не пожелаешь писать.
К этому добавляется никакущая документация на сайте Apple. Да, есть такая-то функция, а что она делает? А как её вызывать? Примеров-то нет в доках.
Вот почему в тот же PHP был такой низкий порог вхождения? Не только из-за простоты языка. А потому, что после описания функции тут же приводился пример работы, который можно было тупо скопировать из справки и перейти к следующей задаче.
Приходится гуглить название в надежде, что на stackoverflow попадётся рабочий пример.

Этот пост для тех, кто уже понял, как просто нарисовать на айфоне окно с кнопкой и надписью, но упёрся в некоторые неочевидные вещи. Что вспомню - напишу. Возможно, что буду добавлять потом новые пометки.
Да и мне самому пригодится.

Хорошие новости - на SwiftUI можно писать программы не только для айфонов и айпадов, но и для самого макбука и прочих устройств от Apple. Даже не меняя кода. Хочешь новое окно - создавай вьюху. Вьюхи - это типа activity на android. Создаются они просто: в xcode создаёшь новый файл и указываешь, что хочешь файлик типа swiftUI. А умный xcode сам уже вставит код, создающий новое окно. Этот код можно скопировать и, изменив имя вьюхи, вставить рядом.

Окно-вьюха из другого окна-вьюхи открывается либо при помощи sheet() или actionSheet(), либо при помощи NavigationLink, передав ей в параметр destination название вьюхи.

Есть некая инструкция "@State", которую пишут перед объявлением переменной. Например:

@State var flag:Bool = false

Если значение переменной flag изменится, то весь код отображения будет перестроен. Например, в эту переменную можно записать результат авторизации и, в зависимости от значения, показывать меню пользователя или окно авторизации.

Очень удобно, да. Но как быть, если нам надо вызвать некую функцию после изменения переменной? Для этого используем .onRecieve(), а именно, цепляем этого слушателя к главному элементу, передаём ему параметром имя отслеживаемой переменной, а в замыкании (в фигурных скобках) пишем вызов этой самой функции.

Более девяти вложенных элементов (кнопок, полей ввода, счётчиков, бегунков, переключателей и т.п.) внутри менеджера расположения элементов (типа VStack, HStack, Group и т.п.) добавить нельзя, компилятор будет ругаться. Это не фича, это изначальный баг, до сих пор не исправленный. К счастью, эти менеджеры можно вкладывать друг в друга без проблем.

Пока всё, вспомню что-то ещё, допишу.
Tags: swiftui, памятка, программирование
Subscribe

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 8 comments