SwiftUI和UIView iOS开发目前主要有两种UI开发方式:
UIKit (UIView): 传统框架,从iOS诞生就存在
SwiftUI: 2019年推出的现代化声明式UI框架
此外,swiftUI还可以在苹果旗下的各类产品中,如mac,iPad,apple watch中使用。
现在新版的xcode创建默认使用swiftUI
例如
1 2 3 4 5 6 7 8 import SwiftUIstruct ContentView : View { var body: some View { Text ("hello world" ) .padding() } }
而UIVIew创建的App则相对较为麻烦一点
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 import UIKitclass HelloWorldViewController : UIViewController { private let helloLabel: UILabel = { let label = UILabel () label.text = "hello world" label.translatesAutoresizingMaskIntoConstraints = false return label }() override func viewDidLoad () { super .viewDidLoad() setupUI() } private func setupUI () { view.backgroundColor = .white view.addSubview(helloLabel) NSLayoutConstraint .activate([ helloLabel.centerXAnchor.constraint(equalTo: view.centerXAnchor), helloLabel.centerYAnchor.constraint(equalTo: view.centerYAnchor) ]) } }
此外SwiftUI提供了两种方式来兼容UIKit:
UIViewRepresentable: 用于包装简单的UIView组件
UIViewControllerRepresentable: 用于包装UIViewController
这里以UIViewControllerRepresentable为例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 struct UIKitViewController : UIViewControllerRepresentable { func makeUIViewController (context : Context ) -> HelloWorldViewController { return HelloWorldViewController () } func updateUIViewController (_ uiViewController : HelloWorldViewController , context : Context ) { } } struct ContentView : View { var body: some View { UIKitViewController () .padding() } }
两种框架的主要区别:
SwiftUI: 声明式语法,代码简洁,跨平台,但仅支持iOS 13+
UIKit: 命令式语法,代码较繁琐,成熟稳定,支持所有iOS版本