本页面由葡萄牙语机器翻译,可能存在错误。葡萄牙语版本为准。
从 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中),不存在 字段↔变量的自动绑定(参见 文本字段)。
另请参阅
这个页面有帮助吗?感谢你的反馈!