# SwiftUI से आना

> View/@State→Component मैपिंग और एक पुनर्लिखित फ़ॉर्म, गंतव्य के अंतर के साथ।

Source: https://crossfly.dev/hi/docs/migrate/from-swiftui — CrossFly documentation. Full docs as one file: https://crossfly.dev/llms-full.txt

# SwiftUI से आना

SwiftUI में `body` की गणना होती है और जब `@State` बदलता है तो व्यू **अमान्य हो जाता है**। CrossFly में आप **एक बार
माउंट** करते हैं और **म्यूट** करते हैं। पहले [दर्शन](/docs/migrate/overview) पढ़ें।

## अनुवाद तालिका
| SwiftUI | CrossFly |
|---|---|
| `View` / गणना किया गया `body` | `onShow()` में **एक बार** माउंट किया गया UI |
| `@State` / `@Binding` / `@ObservedObject` | फ़ील्ड + `repaint()` (बिना स्वचालित अमान्यकरण के) |
| `VStack` / `HStack` / `ZStack` | `VerticalLayout` / `HorizontalLayout` / `RelativeLayout` |
| `Spacer()` | `Gap` / अंश (फ्रेमवर्क का `Spacer` **हटा दिया गया**) |
| `.padding()` | स्टाइल में `ingap` |
| `List` | `VirtualListView` |
| `Text` | `Label` |
| `Button` | `Button` |
| `NavigationStack` / `.sheet` | `Window` का स्टैक / `ActionSheet` |
| `.alert` | `Alert` |
| `async` / `await` / `Task` | `Thread` + `Component.onUI(...)` |
| `Color` | `int 0xAARRGGBB` |

## गंतव्य का अंतर
SwiftUI **केवल Apple पर** चलता है। CrossFly **एक Java बेस** है जो iOS **और** Android, Desktop तथा
Web पर चलता है — सभी में समान स्क्रीन कोड (देखें [प्लेटफ़ॉर्म](/docs/platforms))।

## पहले कैसा था / अब कैसा है — फ़ॉर्म
```swift
// SwiftUI
struct LoginView: View {
   @State private var email = ""
   var body: some View {
      VStack {
         TextField("E-mail", text: $email)
         Button("Entrar") { entrar(email) }
      }
   }
}
```
```java
// CrossFly
public class LoginScreen extends Window {
   @Override public void onShow() throws Exception {
      super.onShow();
      setLayout(new VerticalLayout());
      TextField email = new TextField().caption("E-mail");
      add(LAY_AUTO, email);
      Button entrar = new Button("Entrar");
      entrar.onAction(c -> entrar(email.getText()));   // सबमिट पर मान पढ़ता है (बिना $binding)
      add(LAY_AUTO, entrar);
   }
}
```
> बिना `$binding`: जब आपको ज़रूरत हो तब आप **`getText()` पढ़ते हैं** (उदा.: `onAction` में), फ़ील्ड↔वैरिएबल के बीच
> कोई स्वचालित बंधन नहीं है (देखें [टेक्स्ट फ़ील्ड्स](/docs/ui/forms-and-input/text-fields))।

## यह भी देखें
- [फ़ॉर्म और इनपुट](/docs/ui/forms-and-input) · [नेविगेशन](/docs/ui/navigation)
