跳到内容
CrossFly 是 100% 开源在 GitHub 关注我们
CrossFlyCrossFly
开始使用

本页面由葡萄牙语机器翻译,可能存在错误。葡萄牙语版本为准。

从 SwiftUI 迁移

在 SwiftUI 中,body 是计算得出的,当 @State 变化时视图会失效。在 CrossFly 中你装配 一次并变更。请先阅读 理念。

转换表

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、桌面端和 Web 上运行——所有平台使用同一份界面代码(参见 平台)。

之前/之后——表单

// SwiftUI
struct LoginView: View {
   @State private var email = ""
   var body: some View {
      VStack {
         TextField("E-mail", text: $email)
         Button("Entrar") { entrar(email) }
      }
   }
}
// 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 中),不存在 字段↔变量的自动绑定(参见 文本字段)。

另请参阅

这个页面有帮助吗?