OpenSwiftUi
OpenSwiftUi adalah implementasi OpenSource dari SWIFTUI DSL Apple (bahasa khusus domain).
Tujuan proyek ini adalah untuk tetap dekat dengan API asli mungkin.
Saat ini, proyek ini sedang dalam pengembangan awal.
Latar belakang
Apple memperkenalkan SwiftUi di WWDC 19. Sejak itu, mengembangkan aplikasi dengan antarmuka pengguna grafis menjadi lebih nyaman untuk dibaca, menulis, dan memelihara. Sayangnya, prinsip "Pelajari sekali, terapkan di mana saja" hanya berfungsi pada platform Apple.
Swift berjalan di platform Apple, web, linux, windows, dan bahkan pada perangkat tertanam. Bukankah lebih bagus jika Anda bisa menulis aplikasi berbasis GUI dengan SwiftUi pada platform yang berjalan Swift?
SwiftUi di platform Anda
OpenSwiftUi menyediakan API - proyek lain dapat mengimplementasikan render aktual elemen UI untuk platform yang berbeda seperti Linux, Windows, tertanam, dan banyak lagi.
SwiftUiembedded adalah salah satu proyek pertama yang memanfaatkan OpenSwiftUi (demo).
Berkontribusi
Seiring waktu dan dugaan kolektif, harus dimungkinkan untuk menciptakan kembali API SwiftUi lengkap dari Apple. Periksa ikhtisar status untuk melihat apa yang hilang atau perlu diselesaikan.
Titik awal yang baik adalah terbiasa dengan antarmuka SwiftUi, fokus pada fungsionalitas tertentu, dan cobalah untuk mengimplementasikannya kembali. Alat yang bermanfaat adalah menggunakan refleksi ( Mirror(reflecting: …) ) untuk mengintip ke dalam jenis dan instance SwiftUi. Ini mengungkapkan struktur internal instance (properti, jenis, nama dan warisan).
Setelah Anda menerapkan bagian yang hilang, jangan ragu untuk menyumbangkan permintaan tarik.
Harap dicatat:
Metode dan properti pribadi SwiftUi harus diawali dengan _ (garis bawah) dan ditandai sebagai publik di OpenSwiftUi. Melakukan hal ini diperlukan karena frontend mungkin membutuhkan akses.
Xcode 11.2 atau lebih tinggi diperlukan.
Status
Tampilan dan Kontrol
Hal -hal penting
| Status | Nama | Catatan |
|---|
| ✅ | protocol View | |
Teks
| Status | Nama | Catatan |
|---|
| ✅ | struct Text | |
| struct TextField | |
| struct SecureField | |
| ✅ | struct Font | |
Gambar
| Status | Nama | Catatan |
|---|
| ️ | struct Image | CGimage tidak didukung |
Tombol
| Status | Nama | Catatan |
|---|
| ✅ | struct Button | |
| struct NavigationLink | |
| struct MenuButton | |
| struct EditButton | |
| struct PasteButton | |
Penyeleksi Nilai
| Status | Nama | Catatan |
|---|
| struct Toggle | |
| ️ | struct Picker | |
| struct DatePicker | |
| struct Slider | |
| ️ | struct Stepper | |
Jenis pendukung
| Status | Nama | Catatan |
|---|
| ✅ | struct ViewBuilder | |
| ✅ | protocol ViewModifier | |
Lihat tata letak dan presentasi
Tumpukan
| Status | Nama | Catatan |
|---|
| ✅ | struct HStack | |
| ✅ | struct VStack | |
| ✅ | struct ZStack | |
Daftar dan Tampilan Gulir
| Status | Nama | Catatan |
|---|
| struct List | |
| protocol DynamicViewContent | |
| ✅ | protocol Identifiable | Disediakan oleh Swift. |
| ✅ | struct ForEach | |
| struct ScrollView | |
| ️ | enum Axis | |
Tampilan kontainer
| Status | Nama | Catatan |
|---|
| struct Form | |
| ️ | struct Group | |
| struct GroupBox | |
| struct Section | |
Spacer dan pembagi
| Status | Nama | Catatan |
|---|
| ✅ | struct Spacer | |
| ✅ | struct Divider | |
Pandangan Arsitektur
| Status | Nama | Catatan |
|---|
| struct NavigationView | |
| struct TabView | |
| struct HSplitView | |
| struct VSplitView | |
Presentasi
| Status | Nama | Catatan |
|---|
| struct Alert | |
| struct ActionSheet | |
Item yang terlihat secara kondisional
| Status | Nama | Catatan |
|---|
| ✅ | struct EmptyView | |
| struct EquatableView | |
Jarang digunakan pandangan
| Status | Nama | Catatan |
|---|
| ️ | struct AnyView | init?(_fromValue value: Any) hilang. |
| ✅ | struct TupleView | |
Menggambar dan animasi
Hal -hal penting
| Status | Nama | Catatan |
|---|
| ️ | protocol Shape | |
Animasi
| Status | Nama | Catatan |
|---|
| struct Animation | |
| protocol Animatable | |
| protocol AnimatableModifier | |
| func withAnimation<Result>(Animation?, () -> Result) -> Result | |
| struct AnimationPair | |
| struct EmptyAnimationData | |
| struct AnyTransition | |
Bentuk
| Status | Nama | Catatan |
|---|
| ️ | struct Rectangle | |
| ✅ | enum Edge | |
| struct RoundedRectangle | |
| ️ | struct Circle | |
| struct Ellipse | |
| struct Capsule | |
| struct Path | |
Bentuk yang diubah
| Status | Nama | Catatan |
|---|
| protocol InsettableShape | |
| struct ScaledShape | |
| struct RotatedShape | |
| struct OffsetShape | |
| struct TransformedShape | |
Cat, gaya, dan gradien
| Status | Nama | Catatan |
|---|
| ✅ | 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 | |
Geometri
| Status | Nama | Catatan |
|---|
| struct GeometryProxy | |
| struct GeometryReader | |
| protocol GeometryEffect | |
| struct Angle | |
| struct Anchor | |
| struct UnitPoint | |
| enum CoordinateSpace | |
| struct ProjectionTransform | |
| protocol VectorArithmetic | |
Status dan Aliran Data
Binding
| Status | Nama | Catatan |
|---|
| ️ | struct Binding | |
Tampilan yang bergantung pada data
| Status | Nama | Catatan |
|---|
| ✅ | struct State | |
| struct ObservedObject | |
| struct EnvironmentObject | |
| struct FetchRequest | |
| struct FetchedResults | |
| ️ | protocol DynamicProperty | func update() hilang. |
Nilai Lingkungan
| Status | Nama | Catatan |
|---|
| ✅ | struct Environment | |
| ✅ | struct EnvironmentValues | |
Preferensi
| Status | Nama | Catatan |
|---|
| protocol PreferenceKey | |
| struct LocalizedStringKey | |
Transaksi
| Status | Nama | Catatan |
|---|
| struct Transaction | |
Gerakan
Gerakan dasar
| Status | Nama | Catatan |
|---|
| struct TapGesture | |
| struct LongPressGesture | |
| struct DragGesture | |
| struct MagnificationGesture | |
| struct RotationGesture | |
Gerakan gabungan
| Status | Nama | Catatan |
|---|
| struct SequenceGesture | |
| struct SimultaneousGesture | |
| struct ExclusiveGesture | |
Isyarat khusus
| Status | Nama | Catatan |
|---|
| protocol Gesture | |
| struct AnyGesture | |
Properti Tampilan Dinamis
| Status | Nama | Catatan |
|---|
| struct GestureState | |
| struct GestureStateGesture | |
Dukungan Gesture
| Status | Nama | Catatan |
|---|
| struct GestureMask | |
| struct EventModifiers | |
Legenda
| Simbol | Keterangan |
|---|
| ✅ | Selesai |
| Membuka |
| ️ | Tidak lengkap |
Sumber daya
Antarmuka SwiftUi
Dibandingkan dengan apa yang dapat Anda lihat di Xcode, inti ini menunjukkan kepada Anda lebih dari sekadar antarmuka publik. Ini menunjukkan properti pribadi, dan badan properti, fungsi, dan inisialisasi yang ditandai @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 adalah implementasi SwiftUi untuk web oleh Helge Heß. Tujuan proyek ini difokuskan secara eksklusif di web. Ini menyimpang sedikit dari SwiftUi dengan mengambil beberapa jalan pintas di sana -sini - tetapi terlihat cukup lengkap dalam fungsionalitas dan sangat bagus untuk inspirasi.
Simbol SwiftUi
Perintah ini mencetak tabel simbol SwiftUi melalui utilitas 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 '
Anda juga dapat melihat intinya.
Tautan
- Hasil SwiftUi @ViewBuilder adalah tupleview, bagaimana Apple menggunakannya dan dapat menghindari mengubah keadaan menjadi siapa pun?
- https://stackoverflow.com/questions/56434549/what-enables-swiftuis-dsl
- Membangun tampilan khusus dengan SwiftUi
- SWIFTUI ESSENSI
- Aliran Data Melalui SwiftUi
- Memperkenalkan SwiftUi: Membangun Aplikasi Pertama Anda
- SwiftUi di semua perangkat
Terima kasih khusus
Saya ingin mengucapkan terima kasih khusus kepada Helge Heß. Dia menciptakan Swiftwebui, menyumbang banyak saran untuk OpenSwiftUi, dan membantu dengan wawasan tentang temuannya.
Kontak
- Devran "Cosmo" Uenal
- Twitter: @maccosmo
- LinkedIn: Devranuenal
Lisensi
OpenSwiftUi dirilis di bawah lisensi MIT.