OpenSwiftui
OpenSwiftui ist eine OpenSource-Implementierung von Apple Swiftui DSL (domänenspezifische Sprache).
Ziel des Projekts ist es, der ursprünglichen API wie möglich in der Nähe zu bleiben.
Derzeit befindet sich dieses Projekt in der frühen Entwicklung.
Hintergrund
Apple stellte Swiftui bei WWDC 19 vor. Seitdem wurde es komfortabler, Anwendungen mit grafischen Benutzeroberflächen zu lesen, zu schreiben und zu warten. Leider funktioniert das Prinzip "Einmal lernen, irgendwo anwenden" nur auf Apple -Plattformen.
Swift läuft auf Apple -Plattformen, Web, Linux, Windows und sogar auf eingebetteten Geräten. Wäre es nicht großartig, wenn Sie GUI -basierte Anwendungen mit Swiftui auf Plattformen schreiben könnten, die Swift laufen?
Swiftui auf Ihrer Plattform
OpenSwiftui bietet die API - andere Projekte können die tatsächliche Darstellung von UI -Elementen für verschiedene Plattformen wie Linux, Windows, eingebettet und viele mehr implementieren.
Swiftuiembedded ist eines der ersten Projekte, die OpenSwiftui (Demo) verwenden.
Beitragen
Im Laufe der Zeit und im kollektiven Vermutung sollte es möglich sein, die vollständige Swiftui-API von Apple neu zu erstellen. Überprüfen Sie den Statusüberblick, um zu sehen, was fehlt oder abgeschlossen werden muss.
Ein guter Ausgangspunkt ist es, sich mit der Swiftui-Schnittstelle vertraut zu machen, sich auf bestimmte Funktionen zu konzentrieren und sie erneut zu implementieren. Ein hilfreiches Instrument ist die Verwendung von Reflexion ( Mirror(reflecting: …) ), um in Swiftui -Typen und -Anstanzen zu schauen. Dies zeigt die interne Struktur von Instanzen (Eigenschaften, Typen, Namen und Vererbung).
Nachdem Sie ein fehlendes Stück implementiert haben, können Sie eine Pull -Anfrage gerne beibehalten.
Bitte beachten Sie:
Private Methoden und Eigenschaften von Swiftui sollten von einem _ (Unterstrich) vorangestellt und als öffentlich in OpenSwiftui markiert werden. Dies ist notwendig, da der Frontend möglicherweise Zugriff benötigt.
Xcode 11.2 oder höher ist erforderlich.
Status
Ansichten und Steuerelemente
Essentials
| Status | Name | Notizen |
|---|
| ✅ | protocol View | |
Text
| Status | Name | Notizen |
|---|
| ✅ | struct Text | |
| struct TextField | |
| struct SecureField | |
| ✅ | struct Font | |
Bilder
| Status | Name | Notizen |
|---|
| Euen | struct Image | Cgimage nicht unterstützt |
Knöpfe
| Status | Name | Notizen |
|---|
| ✅ | struct Button | |
| struct NavigationLink | |
| struct MenuButton | |
| struct EditButton | |
| struct PasteButton | |
Wertwählern
| Status | Name | Notizen |
|---|
| struct Toggle | |
| Euen | struct Picker | |
| struct DatePicker | |
| struct Slider | |
| Euen | struct Stepper | |
Unterstützende Typen
| Status | Name | Notizen |
|---|
| ✅ | struct ViewBuilder | |
| ✅ | protocol ViewModifier | |
Layout und Präsentation anzeigen
Stapel
| Status | Name | Notizen |
|---|
| ✅ | struct HStack | |
| ✅ | struct VStack | |
| ✅ | struct ZStack | |
Listen und Scrollenansichten
| Status | Name | Notizen |
|---|
| struct List | |
| protocol DynamicViewContent | |
| ✅ | protocol Identifiable | Bereitgestellt von Swift. |
| ✅ | struct ForEach | |
| struct ScrollView | |
| Euen | enum Axis | |
Containeransichten
| Status | Name | Notizen |
|---|
| struct Form | |
| Euen | struct Group | |
| struct GroupBox | |
| struct Section | |
Abstandshalter und Trenner
| Status | Name | Notizen |
|---|
| ✅ | struct Spacer | |
| ✅ | struct Divider | |
Architektonische Ansichten
| Status | Name | Notizen |
|---|
| struct NavigationView | |
| struct TabView | |
| struct HSplitView | |
| struct VSplitView | |
Präsentationen
| Status | Name | Notizen |
|---|
| struct Alert | |
| struct ActionSheet | |
Bedingt sichtbare Gegenstände
| Status | Name | Notizen |
|---|
| ✅ | struct EmptyView | |
| struct EquatableView | |
Selten verwendete Ansichten
| Status | Name | Notizen |
|---|
| Euen | struct AnyView | init?(_fromValue value: Any) fehlt. |
| ✅ | struct TupleView | |
Zeichnen und Animation
Essentials
| Status | Name | Notizen |
|---|
| Euen | protocol Shape | |
Animation
| Status | Name | Notizen |
|---|
| struct Animation | |
| protocol Animatable | |
| protocol AnimatableModifier | |
| func withAnimation<Result>(Animation?, () -> Result) -> Result | |
| struct AnimationPair | |
| struct EmptyAnimationData | |
| struct AnyTransition | |
Formen
| Status | Name | Notizen |
|---|
| Euen | struct Rectangle | |
| ✅ | enum Edge | |
| struct RoundedRectangle | |
| Euen | struct Circle | |
| struct Ellipse | |
| struct Capsule | |
| struct Path | |
Transformierte Formen
| Status | Name | Notizen |
|---|
| protocol InsettableShape | |
| struct ScaledShape | |
| struct RotatedShape | |
| struct OffsetShape | |
| struct TransformedShape | |
Farben, Stile und Gradienten
| Status | Name | Notizen |
|---|
| ✅ | 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 | |
Geometrie
| Status | Name | Notizen |
|---|
| struct GeometryProxy | |
| struct GeometryReader | |
| protocol GeometryEffect | |
| struct Angle | |
| struct Anchor | |
| struct UnitPoint | |
| enum CoordinateSpace | |
| struct ProjectionTransform | |
| protocol VectorArithmetic | |
Zustand und Datenfluss
Bindungen
| Status | Name | Notizen |
|---|
| Euen | struct Binding | |
Datenabhängige Ansichten
| Status | Name | Notizen |
|---|
| ✅ | struct State | |
| struct ObservedObject | |
| struct EnvironmentObject | |
| struct FetchRequest | |
| struct FetchedResults | |
| Euen | protocol DynamicProperty | func update() fehlen. |
Umgebungswerte
| Status | Name | Notizen |
|---|
| ✅ | struct Environment | |
| ✅ | struct EnvironmentValues | |
Vorlieben
| Status | Name | Notizen |
|---|
| protocol PreferenceKey | |
| struct LocalizedStringKey | |
Transaktionen
| Status | Name | Notizen |
|---|
| struct Transaction | |
Gesten
Grundlegende Gesten
| Status | Name | Notizen |
|---|
| struct TapGesture | |
| struct LongPressGesture | |
| struct DragGesture | |
| struct MagnificationGesture | |
| struct RotationGesture | |
Kombinierte Gesten
| Status | Name | Notizen |
|---|
| struct SequenceGesture | |
| struct SimultaneousGesture | |
| struct ExclusiveGesture | |
Benutzerdefinierte Geste
| Status | Name | Notizen |
|---|
| protocol Gesture | |
| struct AnyGesture | |
Dynamische Ansicht Eigenschaften
| Status | Name | Notizen |
|---|
| struct GestureState | |
| struct GestureStateGesture | |
Gestenunterstützung
| Status | Name | Notizen |
|---|
| struct GestureMask | |
| struct EventModifiers | |
Legende
| Symbol | Beschreibung |
|---|
| ✅ | Erledigt |
| Offen |
| Euen | Unvollständig |
Ressourcen
Swiftui -Schnittstelle
Im Vergleich zu dem, was Sie in Xcode sehen können, zeigt dieser Gist Ihnen mehr als nur die öffentlichen Schnittstellen. Es zeigt private Eigenschaften und den Körper der @inlinable markierten Eigenschaften, Funktionen und Initialisierer.
/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 ist eine Implementierung von Swiftui für das Web von Helge Heß. Das Ziel dieses Projekts konzentriert sich ausschließlich auf das Web. Es weicht ein wenig von Swiftui ab, indem es hier und da einige Abkürzungen einnimmt - aber in der Funktionalität ganz vollständig aussieht und sich hervorragend für Inspiration eignet.
Swiftui -Symbole
Dieser Befehl druckt die Symboltabelle von Swiftui über das llvm-mn Dienstprogramm.
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 '
Sie können sich stattdessen auch diesen Kern ansehen.
Links
- Swiftui @ViewBuilder -Ergebnis ist ein Tupleview. Wie nutzt Apple es und kann es vermeiden, Dinge in irgendwelche Ansicht umzuwandeln?
- https://stackoverflow.com/questions/56434549/what-enables-swiftuis-sl
- Bauen Sie benutzerdefinierte Aussichten mit Swiftui
- Swiftui Essentials
- Daten fließen durch Swiftui
- Einführung von Swiftui: Erstellen Sie Ihre erste App
- Swiftui auf allen Geräten
Besonderer Dank
Ich möchte Helge Heß etwas Besonderes bedanken. Er schuf Swiftwebui, trug viele Vorschläge für OpenSwiftui bei und half bei Einsichten seiner Ergebnisse.
Kontakt
- Devran "Cosmo" Uenal
- Twitter: @maccosmo
- LinkedIn: Devranuenal
Lizenz
OpenSwiftui wird unter der MIT -Lizenz veröffentlicht.