运用SwiftUI加速你现有项目UIKit中的开发速度。

SwiftUI的声明式布局是真的炫酷。不过真正运用到项目中还须要点时间。

不过咱们能够经过SwiftUI中提供的UIViewControllerRepresentable协议 让你的UIKit中的VC显示在XCode11的Preview中, 以下图。swift

ok 咱们直接开始说说如何实现(共三步):

  • 一、咱们先暂定咱们的UIKit的VC叫UIKitViewController,先作一点最简单的UI布局

  • 2. 建立一个中转结构体UIVCPresenter 遵循并实现UIViewControllerRepresentable 协议 这个结构体能够当作UIKit和SwiftUI的一个桥接。

  • 3. 最后就是最基本的SwiftUI 中的View的Preview显示方法。建立一个基本的SwiftUI工程就会有这段示例代码😄

下面就是愉快的按下Option + Command + P 的(刷新Preview)快捷键。

咱们就能够在XCode11的Preview中显示咱们的UIViewController啦~

最后副一下个人示例代码(差很少30行左右的亚子):ide

import SwiftUI

class UIKitViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        self.view.backgroundColor = .red
        let blueView = UIView(frame: CGRect(x: 100, y: 100, width: 100, height: 100))
        blueView.backgroundColor = .green
        view.addSubview(blueView)
    }
}

struct UIVCPresenter: UIViewControllerRepresentable {
    ///UIViewControllerRepresentable  协议中必须实现的方法 -  当 SwiftUI 准备好显示 view 时,它会调用此方法一次
    ///做用: 将须要Preview显示VC 返回出来。
    func makeUIViewController(context: UIViewControllerRepresentableContext<UIVCPresenter>) -> UIKitViewController {
        return UIKitViewController()
    }
    ///UIViewControllerRepresentable  协议中必须实现的方法
    ///    更新UIViewController时候会调用这个方法  能够作一系列l业务实现,
    func updateUIViewController(_ uiViewController: UIKitViewController, context: UIViewControllerRepresentableContext<UIVCPresenter>) {
    }
}

struct swiftUIView: View {
    var body: some View {
        UIVCPresenter()
    }
}

struct UIKitVCPreView : PreviewProvider {
    static var previews: some View {
        swiftUIView()
    }
}复制代码
相关文章
相关标签/搜索