OpenSwiftui
OpenSwiftui-это открытая реализация Apple Swiftui DSL (специфичный для домена языка).
Цель проекта - оставаться рядом с оригинальным API.
В настоящее время этот проект находится в раннем развитии.
Фон
Apple представила Swiftui в WWDC 19. С тех пор разработка приложений с графическими пользовательскими интерфейсами стала более комфортной для чтения, написания и обслуживания. К сожалению, принцип «Учитесь один раз, применить в любом месте» работает только на платформах Apple.
Swift работает на платформах Apple, в Интернете, Linux, Windows и даже на встроенных устройствах. Разве не было бы здорово, если бы вы могли написать приложения на основе графического интерфейса с Swiftui на платформах, которые запускаются Swift?
Swiftui на вашей платформе
OpenSwiftui предоставляет API - другие проекты могут реализовать фактическую рендеринг элементов пользовательского интерфейса для различных платформ, таких как Linux, Windows, Encedded и многие другие.
Swiftuiembedded - один из первых проектов, которые используют OpenSwiftui (демонстрация).
Внося
Со временем и коллективными догадками следует воссоздать полный API Swiftui из Apple. Проверьте обзор статуса, чтобы увидеть, что не хватает или должно быть завершено.
Хорошей отправной точкой является знакомство с интерфейсом Swiftui, сосредоточиться на определенных функциональных возможностях и попытаться переопределить его. Полезным инструментом является использование отражения ( Mirror(reflecting: …) ), чтобы заглянуть в типы и экземпляры Swiftui. Это показывает внутреннюю структуру экземпляров (свойства, типы, имена и наследство).
После того, как вы реализовали недостающий произведение, пожалуйста, не стесняйтесь внести вклад запрос на привлечение.
Пожалуйста, обрати внимание:
Частные методы и свойства Swiftui должны быть предварительно профиксированы с помощью _ (подчеркивания) и отмечены как общественность в OpensWiftui. Это необходимо, потому что фронт может потребоваться доступ.
Xcode 11.2 или выше требуется.
Статус
Виды и элементы управления
Основы
| Статус | Имя | Примечания |
|---|
| ✅ | protocol View | |
Текст
| Статус | Имя | Примечания |
|---|
| ✅ | struct Text | |
| struct TextField | |
| struct SecureField | |
| ✅ | struct Font | |
Изображения
| Статус | Имя | Примечания |
|---|
| ️ | struct Image | CGIMAGE не поддерживается |
Кнопки
| Статус | Имя | Примечания |
|---|
| ✅ | struct Button | |
| struct NavigationLink | |
| struct MenuButton | |
| struct EditButton | |
| struct PasteButton | |
Селекторы значения
| Статус | Имя | Примечания |
|---|
| struct Toggle | |
| ️ | struct Picker | |
| struct DatePicker | |
| struct Slider | |
| ️ | struct Stepper | |
Вспомогательные типы
| Статус | Имя | Примечания |
|---|
| ✅ | struct ViewBuilder | |
| ✅ | protocol ViewModifier | |
Просмотреть макет и презентацию
Стеки
| Статус | Имя | Примечания |
|---|
| ✅ | struct HStack | |
| ✅ | struct VStack | |
| ✅ | struct ZStack | |
Списки и просмотры прокрутки
| Статус | Имя | Примечания |
|---|
| struct List | |
| protocol DynamicViewContent | |
| ✅ | protocol Identifiable | Предоставлено Swift. |
| ✅ | struct ForEach | |
| struct ScrollView | |
| ️ | enum Axis | |
Виды контейнера
| Статус | Имя | Примечания |
|---|
| struct Form | |
| ️ | struct Group | |
| struct GroupBox | |
| struct Section | |
Проставки и разделители
| Статус | Имя | Примечания |
|---|
| ✅ | struct Spacer | |
| ✅ | struct Divider | |
Архитектурные взгляды
| Статус | Имя | Примечания |
|---|
| struct NavigationView | |
| struct TabView | |
| struct HSplitView | |
| struct VSplitView | |
Презентации
| Статус | Имя | Примечания |
|---|
| struct Alert | |
| struct ActionSheet | |
Условно видимые предметы
| Статус | Имя | Примечания |
|---|
| ✅ | struct EmptyView | |
| struct EquatableView | |
Нечасто используемые виды
| Статус | Имя | Примечания |
|---|
| ️ | struct AnyView | init?(_fromValue value: Any) отсутствует. |
| ✅ | struct TupleView | |
Рисунок и анимация
Основы
| Статус | Имя | Примечания |
|---|
| ️ | protocol Shape | |
Анимация
| Статус | Имя | Примечания |
|---|
| struct Animation | |
| protocol Animatable | |
| protocol AnimatableModifier | |
| func withAnimation<Result>(Animation?, () -> Result) -> Result | |
| struct AnimationPair | |
| struct EmptyAnimationData | |
| struct AnyTransition | |
Формы
| Статус | Имя | Примечания |
|---|
| ️ | struct Rectangle | |
| ✅ | enum Edge | |
| struct RoundedRectangle | |
| ️ | struct Circle | |
| struct Ellipse | |
| struct Capsule | |
| struct Path | |
Преобразованные формы
| Статус | Имя | Примечания |
|---|
| protocol InsettableShape | |
| struct ScaledShape | |
| struct RotatedShape | |
| struct OffsetShape | |
| struct TransformedShape | |
Краски, стили и градиенты
| Статус | Имя | Примечания |
|---|
| ✅ | struct Color | |
| struct ImagePaint | |
| struct Gradient | |
| struct LinearGradient | |
| struct AngularGradient | |
| struct RadialGradient | |
| struct ForegroundStyle | |
| struct FillStyle | |
| protocol ShapeStyle | |
| enum RoundedCornerStyle | |
| struct SelectionShapeStyle | |
| struct SeparatorShapeStyle | |
| struct StrokeStyle | |
Геометрия
| Статус | Имя | Примечания |
|---|
| struct GeometryProxy | |
| struct GeometryReader | |
| protocol GeometryEffect | |
| struct Angle | |
| struct Anchor | |
| struct UnitPoint | |
| enum CoordinateSpace | |
| struct ProjectionTransform | |
| protocol VectorArithmetic | |
Состояние и поток данных
Привязки
| Статус | Имя | Примечания |
|---|
| ️ | struct Binding | |
ДАННЫЕ-ВЕЛИЧЕСКИЕ МОЖЕСТВО
| Статус | Имя | Примечания |
|---|
| ✅ | struct State | |
| struct ObservedObject | |
| struct EnvironmentObject | |
| struct FetchRequest | |
| struct FetchedResults | |
| ️ | protocol DynamicProperty | func update() отсутствует. |
Значения среды
| Статус | Имя | Примечания |
|---|
| ✅ | struct Environment | |
| ✅ | struct EnvironmentValues | |
Предпочтения
| Статус | Имя | Примечания |
|---|
| protocol PreferenceKey | |
| struct LocalizedStringKey | |
Транзакции
| Статус | Имя | Примечания |
|---|
| struct Transaction | |
Жесты
Основные жесты
| Статус | Имя | Примечания |
|---|
| struct TapGesture | |
| struct LongPressGesture | |
| struct DragGesture | |
| struct MagnificationGesture | |
| struct RotationGesture | |
Объединенные жесты
| Статус | Имя | Примечания |
|---|
| struct SequenceGesture | |
| struct SimultaneousGesture | |
| struct ExclusiveGesture | |
Пользовательский жест
| Статус | Имя | Примечания |
|---|
| protocol Gesture | |
| struct AnyGesture | |
Свойства динамического представления
| Статус | Имя | Примечания |
|---|
| struct GestureState | |
| struct GestureStateGesture | |
Поддержка жеста
| Статус | Имя | Примечания |
|---|
| struct GestureMask | |
| struct EventModifiers | |
Легенда
| Символ | Описание |
|---|
| ✅ | Сделанный |
| Открыть |
| ️ | Неполный |
Ресурсы
Интерфейс Swiftui
По сравнению с тем, что вы можете увидеть в XCode, эта суть показывает вам больше, чем просто публичные интерфейсы. Он показывает частные свойства и тело @inlinable отмеченных свойств, функций и инициализаторов.
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/SwiftUI.framework/Versions/A/Modules/SwiftUI.swiftmodule/x86_64.swiftinterface
SwiftWebui
Swiftwebui - это реализация Swiftui для Интернета Хельге Хес. Цель этого проекта сосредоточена исключительно на Интернете. Он немного отклоняется от Swiftui, принимая несколько ярлыков здесь и там, но выглядит довольно полным по функциональности и отлично подходит для вдохновения.
Символы Swiftui
Эта команда печатает таблицу символов Swiftui через утилиту llvm-mn .
nm -gUj /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/System/Library/Frameworks/SwiftUI.framework/SwiftUI | swift-demangle | sed ' s/SwiftUI.//g ' | sed ' s/Swift.//g '
Вместо этого вы также можете взглянуть на эту суть.
Ссылки
- Swiftui @ViewBuilder Результат - это TupleView, как Apple использует его и может избежать превращения вещей в AntyView?
- https://stackoverflow.com/questions/56434549/what-enables-swiftuis-dsl
- Создание индивидуальных видов со Swiftui
- Swiftui Essentials
- Поток данных через Swiftui
- Представляем Swiftui: Создание вашего первого приложения
- Swiftui на всех устройствах
Особая благодарность
Я хочу поблагодарить Хельдж Хес. Он создал Swiftwebui, внес много предложений Openswiftui и помог с пониманием его выводов.
Контакт
- Девран "Космо" Уэнал
- Твиттер: @maccosmo
- LinkedIn: Devranuenal
Лицензия
OpenSwiftui выпускается по лицензии MIT.