Openswiftui
OpenSwiftUi est une implémentation OpenSource du Swiftui DSL d'Apple (langage spécifique au domaine).
L'objectif du projet est de rester près de l'API d'origine possible.
Actuellement, ce projet est en début de développement.
Arrière-plan
Apple a introduit Swiftui sur WWDC 19. Depuis lors, le développement d'applications avec des interfaces utilisateur graphique est devenue plus à l'aise pour lire, écrire et maintenir. Malheureusement, le principe "Apprenez une fois, appliquez n'importe où" fonctionne uniquement sur les plates-formes Apple.
Swift s'exécute sur les plates-formes Apple, le Web, Linux, Windows et même sur des appareils intégrés. Ne serait-ce pas génial si vous pouviez écrire des applications basées sur l'interface graphique avec Swiftui sur des plates-formes qui s'exécutent Swift?
Swiftui sur votre plateforme
OpenSWiftUi fournit l'API - d'autres projets peuvent implémenter le rendu réel des éléments d'interface utilisateur pour différentes plates-formes comme Linux, Windows, Embedded et bien d'autres.
Swiftuiembedded est l'un des premiers projets qui utilise OpenSwiftUi (démo).
Contributif
Au fil du temps et de la conjecture collective, il devrait être possible de recréer l'API Swiftui complète d'Apple. Vérifiez l'aperçu de l'état pour voir ce qui manque ou doit être terminé.
Un bon point de départ consiste à se familiariser avec l'interface Swiftui, à se concentrer sur certaines fonctionnalités et à essayer de le réimplémenter. Un outil utile consiste à utiliser la réflexion ( Mirror(reflecting: …) ) pour jeter un œil aux types et instances Swiftui. Cela révèle la structure interne des instances (propriétés, types, noms et héritage).
Une fois que vous avez mis en œuvre une pièce manquante, n'hésitez pas à apporter une demande de traction.
Veuillez noter:
Les méthodes et les propriétés privées de Swiftui doivent être préfixées par un _ (soulignement) et marquées comme publiques dans OpenSwiftui. Cela est nécessaire car le frontend peut avoir besoin d'accès.
Xcode 11.2 ou plus est requis.
Statut
Vues et commandes
Essentiel
| Statut | Nom | Notes |
|---|
| ✅ | protocol View | |
Texte
| Statut | Nom | Notes |
|---|
| ✅ | struct Text | |
| struct TextField | |
| struct SecureField | |
| ✅ | struct Font | |
Images
| Statut | Nom | Notes |
|---|
| ️ | struct Image | CGIMAGE non soutenu |
Boutons
| Statut | Nom | Notes |
|---|
| ✅ | struct Button | |
| struct NavigationLink | |
| struct MenuButton | |
| struct EditButton | |
| struct PasteButton | |
Sélecteurs de valeur
| Statut | Nom | Notes |
|---|
| struct Toggle | |
| ️ | struct Picker | |
| struct DatePicker | |
| struct Slider | |
| ️ | struct Stepper | |
Types de soutien
| Statut | Nom | Notes |
|---|
| ✅ | struct ViewBuilder | |
| ✅ | protocol ViewModifier | |
Voir la disposition et la présentation
Piles
| Statut | Nom | Notes |
|---|
| ✅ | struct HStack | |
| ✅ | struct VStack | |
| ✅ | struct ZStack | |
Listes et vues de défilement
| Statut | Nom | Notes |
|---|
| struct List | |
| protocol DynamicViewContent | |
| ✅ | protocol Identifiable | Fourni par Swift. |
| ✅ | struct ForEach | |
| struct ScrollView | |
| ️ | enum Axis | |
Vues de conteneurs
| Statut | Nom | Notes |
|---|
| struct Form | |
| ️ | struct Group | |
| struct GroupBox | |
| struct Section | |
Entretoise et séparateurs
| Statut | Nom | Notes |
|---|
| ✅ | struct Spacer | |
| ✅ | struct Divider | |
Vues architecturales
| Statut | Nom | Notes |
|---|
| struct NavigationView | |
| struct TabView | |
| struct HSplitView | |
| struct VSplitView | |
Présentations
| Statut | Nom | Notes |
|---|
| struct Alert | |
| struct ActionSheet | |
Articles visibles conditionnellement
| Statut | Nom | Notes |
|---|
| ✅ | struct EmptyView | |
| struct EquatableView | |
Vues rarement utilisées
| Statut | Nom | Notes |
|---|
| ️ | struct AnyView | init?(_fromValue value: Any) manquant. |
| ✅ | struct TupleView | |
Dessin et animation
Essentiel
| Statut | Nom | Notes |
|---|
| ️ | protocol Shape | |
Animation
| Statut | Nom | Notes |
|---|
| struct Animation | |
| protocol Animatable | |
| protocol AnimatableModifier | |
| func withAnimation<Result>(Animation?, () -> Result) -> Result | |
| struct AnimationPair | |
| struct EmptyAnimationData | |
| struct AnyTransition | |
Formes
| Statut | Nom | Notes |
|---|
| ️ | struct Rectangle | |
| ✅ | enum Edge | |
| struct RoundedRectangle | |
| ️ | struct Circle | |
| struct Ellipse | |
| struct Capsule | |
| struct Path | |
Formes transformées
| Statut | Nom | Notes |
|---|
| protocol InsettableShape | |
| struct ScaledShape | |
| struct RotatedShape | |
| struct OffsetShape | |
| struct TransformedShape | |
Peintures, styles et gradients
| Statut | Nom | Notes |
|---|
| ✅ | 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 | |
Géométrie
| Statut | Nom | Notes |
|---|
| struct GeometryProxy | |
| struct GeometryReader | |
| protocol GeometryEffect | |
| struct Angle | |
| struct Anchor | |
| struct UnitPoint | |
| enum CoordinateSpace | |
| struct ProjectionTransform | |
| protocol VectorArithmetic | |
État et flux de données
Reliures
| Statut | Nom | Notes |
|---|
| ️ | struct Binding | |
Vues dépendantes des données
| Statut | Nom | Notes |
|---|
| ✅ | struct State | |
| struct ObservedObject | |
| struct EnvironmentObject | |
| struct FetchRequest | |
| struct FetchedResults | |
| ️ | protocol DynamicProperty | func update() manquant. |
Valeurs environnementales
| Statut | Nom | Notes |
|---|
| ✅ | struct Environment | |
| ✅ | struct EnvironmentValues | |
Préférences
| Statut | Nom | Notes |
|---|
| protocol PreferenceKey | |
| struct LocalizedStringKey | |
Transactions
| Statut | Nom | Notes |
|---|
| struct Transaction | |
Gestes
Gestes de base
| Statut | Nom | Notes |
|---|
| struct TapGesture | |
| struct LongPressGesture | |
| struct DragGesture | |
| struct MagnificationGesture | |
| struct RotationGesture | |
Gestes combinés
| Statut | Nom | Notes |
|---|
| struct SequenceGesture | |
| struct SimultaneousGesture | |
| struct ExclusiveGesture | |
Geste personnalisé
| Statut | Nom | Notes |
|---|
| protocol Gesture | |
| struct AnyGesture | |
Propriétés de vue dynamique
| Statut | Nom | Notes |
|---|
| struct GestureState | |
| struct GestureStateGesture | |
Soutien aux gestes
| Statut | Nom | Notes |
|---|
| struct GestureMask | |
| struct EventModifiers | |
Légende
| Symbole | Description |
|---|
| ✅ | Fait |
| Ouvrir |
| ️ | Incomplet |
Ressources
Interface Swiftui
Par rapport à ce que vous pouvez voir dans Xcode, ce Gist vous montre plus que les interfaces publiques. Il montre des propriétés privées et le corps des propriétés, fonctions et initialiseurs marqués @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 est une implémentation de Swiftui pour le Web par Helge Heß. L'objectif de ce projet est axé exclusivement sur le Web. Il s'écarte un peu de Swiftui en prenant des raccourcis ici et là - mais semble assez complet en fonctionnalité et est idéal pour l'inspiration.
Symboles Swiftui
Cette commande imprime le tableau des symboles de Swiftui via l'utilitaire 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 '
Vous pouvez également jeter un œil à cet Gist à la place.
Links
- Le résultat Swiftui @ViewBuilder est un tupleview, comment Apple l'utilise-t-il et peut éviter de transformer les choses en AnyView?
- https://stackoverflow.com/questions/56434549/what-enables-swiftuis-dsl
- Construire des vues personnalisées avec Swiftui
- Swiftui Essentials
- Flux de données via Swiftui
- Présentation de Swiftui: Construire votre première application
- Swiftui sur tous les appareils
Merci spécial
Je tiens à remercier particulièrement Helge Heß. Il a créé Swiftwebui, a contribué de nombreuses suggestions à OpenSwiftUi et a aidé à comprendre ses conclusions.
Contact
- Devran "Cosmo" Uenal
- Twitter: @macsmo
- LinkedIn: Devranuenal
Licence
OpenSwiftUi est libéré sous la licence du MIT.