Openswiftui
OpenSwiftui es una implementación de OpenSource del Swiftui DSL de Apple (lenguaje específico del dominio).
El objetivo del proyecto es mantenerse cerca de la API original posible.
Actualmente, este proyecto está en el desarrollo temprano.
Fondo
Apple introdujo Swiftui en WWDC 19. Desde entonces, el desarrollo de aplicaciones con interfaces gráficas de usuario se volvió más cómoda de leer, escribir y mantener. Desafortunadamente, el principio "Aprender una vez, aplicar en cualquier lugar" funciona solo en las plataformas de Apple.
Swift se ejecuta en las plataformas Apple, la web, Linux, Windows e incluso en dispositivos integrados. ¿No sería genial si pudiera escribir aplicaciones basadas en GUI con Swiftui en plataformas que funcionan Swift?
Swiftui en tu plataforma
OpenSwiftui proporciona la API: otros proyectos pueden implementar la representación real de los elementos de la interfaz de usuario para diferentes plataformas como Linux, Windows, incrustados y muchos más.
Swiftuiembedded es uno de los primeros proyectos que utilizan OpenSwiftui (demostración).
Que contribuye
Con el tiempo y las conjeturas colectivas, debería ser posible recrear la API Swiftui completa de Apple. Verifique la descripción general del estado para ver qué falta o debe completarse.
Un buen punto de partida es familiarizarse con la interfaz Swiftui, centrarse en cierta funcionalidad e intentar volver a implementarla. Una herramienta útil es usar reflexión ( Mirror(reflecting: …) ) para mirar a los tipos e instancias de Swiftui. Esto revela la estructura interna de las instancias (propiedades, tipos, nombres y herencia).
Una vez que haya implementado una pieza faltante, no dude en contribuir con una solicitud de extracción.
Tenga en cuenta:
Los métodos y propiedades privadas de Swiftui deben ser prefiadas por un _ (inferior) y marcados como público en OpenSwiftui. Hacer esto es necesario porque el interfaz podría necesitar acceso.
Se requiere Xcode 11.2 o superior.
Estado
Vistas y controles
Esencial
| Estado | Nombre | Notas |
|---|
| ✅ | protocol View | |
Texto
| Estado | Nombre | Notas |
|---|
| ✅ | struct Text | |
| struct TextField | |
| struct SecureField | |
| ✅ | struct Font | |
Imágenes
| Estado | Nombre | Notas |
|---|
| ️ | struct Image | CGIMAGE no es compatible |
Botones
| Estado | Nombre | Notas |
|---|
| ✅ | struct Button | |
| struct NavigationLink | |
| struct MenuButton | |
| struct EditButton | |
| struct PasteButton | |
Selectores de valor
| Estado | Nombre | Notas |
|---|
| struct Toggle | |
| ️ | struct Picker | |
| struct DatePicker | |
| struct Slider | |
| ️ | struct Stepper | |
Tipos de apoyo
| Estado | Nombre | Notas |
|---|
| ✅ | struct ViewBuilder | |
| ✅ | protocol ViewModifier | |
Ver diseño y presentación
Pilas
| Estado | Nombre | Notas |
|---|
| ✅ | struct HStack | |
| ✅ | struct VStack | |
| ✅ | struct ZStack | |
Listas y vistas de desplazamiento
| Estado | Nombre | Notas |
|---|
| struct List | |
| protocol DynamicViewContent | |
| ✅ | protocol Identifiable | Proporcionado por Swift. |
| ✅ | struct ForEach | |
| struct ScrollView | |
| ️ | enum Axis | |
Vistas de contenedores
| Estado | Nombre | Notas |
|---|
| struct Form | |
| ️ | struct Group | |
| struct GroupBox | |
| struct Section | |
Espaciador y divisores
| Estado | Nombre | Notas |
|---|
| ✅ | struct Spacer | |
| ✅ | struct Divider | |
Vistas arquitectónicas
| Estado | Nombre | Notas |
|---|
| struct NavigationView | |
| struct TabView | |
| struct HSplitView | |
| struct VSplitView | |
Presentaciones
| Estado | Nombre | Notas |
|---|
| struct Alert | |
| struct ActionSheet | |
Artículos visibles condicionalmente
| Estado | Nombre | Notas |
|---|
| ✅ | struct EmptyView | |
| struct EquatableView | |
Vistas utilizadas con poca frecuencia
| Estado | Nombre | Notas |
|---|
| ️ | struct AnyView | init?(_fromValue value: Any) falta. |
| ✅ | struct TupleView | |
Dibujo y animación
Esencial
| Estado | Nombre | Notas |
|---|
| ️ | protocol Shape | |
Animación
| Estado | Nombre | Notas |
|---|
| struct Animation | |
| protocol Animatable | |
| protocol AnimatableModifier | |
| func withAnimation<Result>(Animation?, () -> Result) -> Result | |
| struct AnimationPair | |
| struct EmptyAnimationData | |
| struct AnyTransition | |
Formas
| Estado | Nombre | Notas |
|---|
| ️ | struct Rectangle | |
| ✅ | enum Edge | |
| struct RoundedRectangle | |
| ️ | struct Circle | |
| struct Ellipse | |
| struct Capsule | |
| struct Path | |
Formas transformadas
| Estado | Nombre | Notas |
|---|
| protocol InsettableShape | |
| struct ScaledShape | |
| struct RotatedShape | |
| struct OffsetShape | |
| struct TransformedShape | |
Pinturas, estilos y gradientes
| Estado | Nombre | Notas |
|---|
| ✅ | 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 | |
Geometría
| Estado | Nombre | Notas |
|---|
| struct GeometryProxy | |
| struct GeometryReader | |
| protocol GeometryEffect | |
| struct Angle | |
| struct Anchor | |
| struct UnitPoint | |
| enum CoordinateSpace | |
| struct ProjectionTransform | |
| protocol VectorArithmetic | |
Estado y flujo de datos
Ataduras
| Estado | Nombre | Notas |
|---|
| ️ | struct Binding | |
Vistas dependientes de datos
| Estado | Nombre | Notas |
|---|
| ✅ | struct State | |
| struct ObservedObject | |
| struct EnvironmentObject | |
| struct FetchRequest | |
| struct FetchedResults | |
| ️ | protocol DynamicProperty | func update() Falta. |
Valores ambientales
| Estado | Nombre | Notas |
|---|
| ✅ | struct Environment | |
| ✅ | struct EnvironmentValues | |
Preferencias
| Estado | Nombre | Notas |
|---|
| protocol PreferenceKey | |
| struct LocalizedStringKey | |
Actas
| Estado | Nombre | Notas |
|---|
| struct Transaction | |
Gestos
Gestos básicos
| Estado | Nombre | Notas |
|---|
| struct TapGesture | |
| struct LongPressGesture | |
| struct DragGesture | |
| struct MagnificationGesture | |
| struct RotationGesture | |
Gestos combinados
| Estado | Nombre | Notas |
|---|
| struct SequenceGesture | |
| struct SimultaneousGesture | |
| struct ExclusiveGesture | |
Gesto personalizado
| Estado | Nombre | Notas |
|---|
| protocol Gesture | |
| struct AnyGesture | |
Propiedades de vista dinámica
| Estado | Nombre | Notas |
|---|
| struct GestureState | |
| struct GestureStateGesture | |
Soporte de gestos
| Estado | Nombre | Notas |
|---|
| struct GestureMask | |
| struct EventModifiers | |
Leyenda
| Símbolo | Descripción |
|---|
| ✅ | Hecho |
| Abierto |
| ️ | Incompleto |
Recursos
Interfaz swiftui
En comparación con lo que puede ver en Xcode, esta esencia le muestra más que solo las interfaces públicas. Muestra propiedades privadas y el cuerpo de propiedades, funciones e inicializadores marcados @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 es una implementación de Swiftui para la web por Helge Heß. El objetivo de este proyecto se centra exclusivamente en la web. Se desvía un poco de Swiftui tomando algunos atajos aquí y allá, pero parece bastante completo en funcionalidad y es excelente para inspirarse.
Símbolos swiftui
Este comando imprime la tabla de símbolos de Swiftui a través de la utilidad 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 '
También puede echar un vistazo a este esencia.
Campo de golf
- El resultado de Swiftui @ViewBuilder es una vista de tupleview, ¿cómo lo usa Apple y puede evitar convertir las cosas en Anyview?
- https://stackoverflow.com/questions/56434549/what-enables-swiftuis-dsl
- Construyendo vistas personalizadas con Swiftui
- Swiftui Essentials
- Flujo de datos a través de Swiftui
- Presentación de Swiftui: Construyendo su primera aplicación
- Swiftui en todos los dispositivos
Agradecimiento especial
Quiero dar un agradecimiento especial a Helge Heef. Creó Swiftwebui, contribuyó con muchas sugerencias a OpenSwiftui y ayudó con ideas de sus hallazgos.
Contacto
- Devran "Cosmo" Uenal
- Twitter: @maccosmo
- LinkedIn: Devranuenal
Licencia
OpenSwiftui se libera bajo la licencia MIT.