오픈 wiftui
OpenSwiftui는 Apple의 Swiftui DSL (도메인 별 언어)의 OpenSource 구현입니다.
프로젝트의 목표는 가능한 한 원래 API에 가깝게 유지하는 것입니다.
현재이 프로젝트는 초기 개발 중입니다.
배경
Apple은 WWDC 19에서 Swiftui를 소개했습니다. 그 이후로 그래픽 사용자 인터페이스를 사용하여 응용 프로그램을 개발하는 것이 더 편안 해지고 쓰기 및 유지 관리하기가 더욱 편안해졌습니다. 불행히도, "한 번 배우고, 어디서나 적용"원칙은 Apple 플랫폼에서만 작동합니다.
Swift는 Apple 플랫폼, 웹, Linux, Windows 및 임베디드 장치에서도 실행됩니다. Swift를 실행하는 플랫폼에서 Swiftui로 GUI 기반 응용 프로그램을 작성할 수 있다면 좋지 않습니까?
플랫폼에서 Swiftui
OpenSwiftui는 API를 제공합니다. 다른 프로젝트는 Linux, Windows, Embedded 등과 같은 다른 플랫폼에 대한 UI 요소의 실제 렌더링을 구현할 수 있습니다.
Swiftuiembedded는 OpenSwiftui (DEM)을 사용하는 최초의 프로젝트 중 하나입니다.
기여
시간과 집단적 추측에 따라 Apple에서 완전한 Swiftui API를 다시 만들 수 있어야합니다. 상태 개요를 확인하여 누락 된 내용 또는 완료해야 할 사항을 확인하십시오.
좋은 출발점은 Swiftui 인터페이스에 익숙해지고 특정 기능에 집중하고 재 구현하는 것입니다. 유용한 도구는 반사 ( Mirror(reflecting: …) )를 사용하여 Swiftui 유형과 인스턴스를 들여다 보는 것입니다. 이것은 인스턴스 (속성, 유형, 이름 및 상속)의 내부 구조를 보여줍니다.
누락 된 부분을 구현하면 풀 요청을 자유롭게 기부하십시오.
참고 :
Swiftui의 개인 방법과 속성은 _ (밑줄)에 의해 접두어를 접두어로 만들고 OpenSwiftui에서 공개적으로 표시되어야합니다. 프론트 엔드에 액세스가 필요할 수 있으므로이 작업을 수행해야합니다.
Xcode 11.2 이상이 필요합니다.
상태
견해와 통제
골자
텍스트
| 상태 | 이름 | 메모 |
|---|
| ✅ | struct Text | |
| struct TextField | |
| struct SecureField | |
| ✅ | struct Font | |
이미지
| 상태 | 이름 | 메모 |
|---|
| 켈 | struct Image | cgimage는 지원되지 않습니다 |
버튼
| 상태 | 이름 | 메모 |
|---|
| ✅ | struct Button | |
| struct NavigationLink | |
| struct MenuButton | |
| struct EditButton | |
| struct PasteButton | |
가치 선택기
| 상태 | 이름 | 메모 |
|---|
| struct Toggle | |
| 켈 | struct Picker | |
| struct DatePicker | |
| struct Slider | |
| 켈 | struct Stepper | |
지원 유형
| 상태 | 이름 | 메모 |
|---|
| ✅ | struct ViewBuilder | |
| ✅ | protocol ViewModifier | |
레이아웃 및 프리젠 테이션을보십시오
스택
| 상태 | 이름 | 메모 |
|---|
| ✅ | struct HStack | |
| ✅ | struct VStack | |
| ✅ | struct ZStack | |
목록 및 스크롤보기
| 상태 | 이름 | 메모 |
|---|
| struct List | |
| protocol DynamicViewContent | |
| ✅ | protocol Identifiable | Swift가 제공합니다. |
| ✅ | struct ForEach | |
| struct ScrollView | |
| 켈 | enum Axis | |
컨테이너 뷰
| 상태 | 이름 | 메모 |
|---|
| struct Form | |
| 켈 | 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 | |
드물게 사용되는 견해
| 상태 | 이름 | 메모 |
|---|
| 켈 | struct AnyView | init?(_fromValue value: Any) 누락. |
| ✅ | struct TupleView | |
그림과 애니메이션
골자
| 상태 | 이름 | 메모 |
|---|
| 켈 | protocol Shape | |
생기
| 상태 | 이름 | 메모 |
|---|
| struct Animation | |
| protocol Animatable | |
| protocol AnimatableModifier | |
| func withAnimation<Result>(Animation?, () -> Result) -> Result | |
| struct AnimationPair | |
| struct EmptyAnimationData | |
| struct AnyTransition | |
모양
| 상태 | 이름 | 메모 |
|---|
| 켈 | struct Rectangle | |
| ✅ | enum Edge | |
| struct RoundedRectangle | |
| 켈 | 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 Binding | |
데이터 의존적 견해
| 상태 | 이름 | 메모 |
|---|
| ✅ | struct State | |
| struct ObservedObject | |
| struct EnvironmentObject | |
| struct FetchRequest | |
| struct FetchedResults | |
| 켈 | protocol DynamicProperty | func update() 누락. |
환경 가치
| 상태 | 이름 | 메모 |
|---|
| ✅ | struct Environment | |
| ✅ | struct EnvironmentValues | |
선호도
| 상태 | 이름 | 메모 |
|---|
| protocol PreferenceKey | |
| struct LocalizedStringKey | |
업무
| 상태 | 이름 | 메모 |
|---|
| struct Transaction | |
제스처
기본 제스처
| 상태 | 이름 | 메모 |
|---|
| 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는 Helge Heß의 웹을위한 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 결과는 튜플 뷰입니다. Apple은 어떻게 사용하고 물건을 다른 뷰로 바꾸는 것을 피할 수 있습니까?
- https://stackoverflow.com/questions/56434549/what-enables-swiftuis-dsl
- Swiftui로 맞춤형보기 구축
- Swiftui Essentials
- Swiftui를 통해 데이터가 흐릅니다
- Swiftui 소개 : 첫 번째 앱 구축
- 모든 장치의 Swiftui
특별한 감사
Helge Heß에게 특별한 감사를 드리고 싶습니다. 그는 Swiftwebui를 만들었고 Openswiftui에게 많은 제안을했으며 그의 발견에 대한 통찰력을 도왔습니다.
연락하다
- Devran "Cosmo"Uenal
- 트위터 : @MacCosmo
- LinkedIn : Devranuenal
특허
OpenSwiftui는 MIT 라이센스에 따라 릴리스됩니다.