Openswiftui
OpenSwiftui是Apple Swiftui DSL(特定领域)的OpenSource实现。
该项目的目标是尽可能靠近原始API。
目前,该项目正在早期开发中。
背景
苹果在WWDC 19上介绍了Swiftui。从那时起,使用图形用户界面的开发应用程序变得更加舒适地读写,写入和维护。不幸的是,“一次学习,应用到任何地方”的原则仅在Apple平台上起作用。
Swift在Apple平台,Web,Linux,Windows,甚至在嵌入式设备上运行。如果您可以在运行Swift的平台上与SwiftUI一起编写基于GUI的应用程序,那不是很好吗?
平台上的swiftui
OpenSwiftui提供了API - 其他项目可以针对Linux,Windows,Embedded等不同平台实施UI元素的实际渲染。
Swiftuiembedded是使用OpenSwiftui(Demo)的第一批项目之一。
贡献
随着时间的流逝和集体猜测,应该可以从Apple重新创建完整的Swiftui API。检查状态概述以查看缺少或需要完成的内容。
一个好的起点是熟悉SwiftUI接口,专注于某些功能,并尝试重新实现它。一个有用的工具是使用反射( Mirror(reflecting: …) )窥视SwiftUI类型和实例。这揭示了实例的内部结构(属性,类型,名称和继承)。
实施缺失的作品后,请随时提出拉动请求。
请注意:
Swiftui的私人方法和属性应由_ (下划线)前缀,并在OpenSwiftUI中标记为公共。这样做是必要的,因为前端可能需要访问。
需要XCode 11.2或更高。
地位
视图和控件
要点
文本
| 地位 | 姓名 | 笔记 |
|---|
| ✅ | struct Text | |
| struct TextField | |
| struct SecureField | |
| ✅ | struct Font | |
图像
| 地位 | 姓名 | 笔记 |
|---|
| 配x | struct Image | CGIMAGE不支持 |
按钮
| 地位 | 姓名 | 笔记 |
|---|
| ✅ | struct Button | |
| struct NavigationLink | |
| struct MenuButton | |
| struct EditButton | |
| struct PasteButton | |
价值选择器
| 地位 | 姓名 | 笔记 |
|---|
| struct Toggle | |
| 配x | struct Picker | |
| struct DatePicker | |
| struct Slider | |
| 配x | struct Stepper | |
支持类型
| 地位 | 姓名 | 笔记 |
|---|
| ✅ | struct ViewBuilder | |
| ✅ | protocol ViewModifier | |
查看布局和演示文稿
堆栈
| 地位 | 姓名 | 笔记 |
|---|
| ✅ | struct HStack | |
| ✅ | struct VStack | |
| ✅ | struct ZStack | |
列表和滚动视图
| 地位 | 姓名 | 笔记 |
|---|
| struct List | |
| protocol DynamicViewContent | |
| ✅ | protocol Identifiable | 由Swift提供。 |
| ✅ | struct ForEach | |
| struct ScrollView | |
| 配x | enum Axis | |
容器视图
| 地位 | 姓名 | 笔记 |
|---|
| struct Form | |
| 配x | 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 | |
很少使用的视图
| 地位 | 姓名 | 笔记 |
|---|
| 配x | struct AnyView | init?(_fromValue value: Any)丢失。 |
| ✅ | struct TupleView | |
绘画和动画
要点
动画片
| 地位 | 姓名 | 笔记 |
|---|
| struct Animation | |
| protocol Animatable | |
| protocol AnimatableModifier | |
| func withAnimation<Result>(Animation?, () -> Result) -> Result | |
| struct AnimationPair | |
| struct EmptyAnimationData | |
| struct AnyTransition | |
形状
| 地位 | 姓名 | 笔记 |
|---|
| 配x | struct Rectangle | |
| ✅ | enum Edge | |
| struct RoundedRectangle | |
| 配x | 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 State | |
| struct ObservedObject | |
| struct EnvironmentObject | |
| struct FetchRequest | |
| struct FetchedResults | |
| 配x | protocol DynamicProperty | func update()缺失。 |
环境价值
| 地位 | 姓名 | 笔记 |
|---|
| ✅ | struct Environment | |
| ✅ | struct EnvironmentValues | |
偏好
| 地位 | 姓名 | 笔记 |
|---|
| protocol PreferenceKey | |
| struct LocalizedStringKey | |
交易
手势
基本手势
| 地位 | 姓名 | 笔记 |
|---|
| 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是HelgeHeß的SwiftUi实施Swiftui。该项目的目标仅专注于网络。它通过在这里和那里进行一些快捷方式来偏离Swiftui,但功能看起来很完整,非常适合灵感。
Swiftui符号
此命令通过llvm-mn实用程序打印SwiftUi的符号表。
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如何使用它并避免将事物变成Anyview?
- https://stackoverflow.com/questions/56434549/what-enables-swiftuis-dsl
- 使用Swiftui建立自定义景观
- Swiftui Essentials
- 通过Swiftui的数据流
- 介绍Swiftui:构建您的第一个应用程序
- 所有设备上的Swiftui
特别感谢
我要特别感谢HelgeHeß。他创建了SwiftWebui,为Openswiftui贡献了许多建议,并帮助了他的发现的见解。
接触
- Devran“ Cosmo” Uenal
- Twitter:@maccosmo
- LinkedIn:Devranuenal
执照
OpenSwiftui是根据MIT许可发布的。