uikit2 uikit3_将swiftui与uikit应用程序集成以提早采用

uikit2 uikit3

SwiftUI was introduced in iOS 13 at a time when many of us have a big app built with UIKit. SwiftUI makes us enthusiastic to get started with this new framework for building apps, just like when Swift was first introduced.

在我们许多人都使用UIKit构建大型应用程序的时候,iOS 13中引入了SwiftUI。 就像首次引入Swift一样,SwiftUI使我们热衷于开始使用这个用于构建应用程序的新框架。

When Swift was introduced we had to migrate from Objective-C to Swift. Many apps are probably still using (partly) Objective-C, as that transition can take quite some time. It’s good to know how to start the transition to make this process as short as possible. iOS 14 is getting close and you might consider dropping iOS 12 later this year, allowing you to write new views in SwiftUI. So, here’s an article explaining how you can use SwiftUI within a UIKit application.

引入Swift时,我们不得不从Objective-C迁移到Swift。 许多应用可能仍在使用(部分)Objective-C,因为这种转换可能会花费一些时间。 很高兴知道如何开始过渡以使此过程尽可能短。 iOS 14已经接近尾声,您可以考虑在今年晚些时候删除iOS 12 ,以便您在SwiftUI中编写新视图。 因此,本文介绍了如何在UIKit应用程序中使用SwiftUI。

Adding SwiftUI views in a UIKit application early on will make your future self a lot happier!

尽早在UIKit应用程序中添加SwiftUI视图将使您未来的生活更快乐!

在UIKit应用中尽快使用SwiftUI的好处 (The Benefits of Using SwiftUI As Soon as Possible in a UIKit App)

Transitioning from a UIKit app to SwiftUI is time-consuming — for larger apps it will probably take years. Apps written in Objective-C had to make the same transition when Swift was introduced and are probably still not completely moved over. So, adopting SwiftUI early comes with a few benefits:

从UIKit应用程序过渡到SwiftUI非常耗时-对于大型应用程序可能需要数年时间。 在引入Swift时,用Objective-C编写的应用程序必须进行相同的转换,并且可能仍未完全移开。 因此,尽早采用SwiftUI有一些好处:

  • There’s no need to rewrite your new views in the future to SwiftUI.

    将来无需将新视图重写为SwiftUI。
  • You start learning SwiftUI while developing as you normally do.

    您像平时一样开始学习SwiftUI。
  • The transition to SwiftUI takes time. The earlier you start, the earlier your app will be completely written in SwiftUI.

    过渡到SwiftUI需要时间。 开始时间越早,您的应用程序将越早用SwiftUI完全编写。

在UIKit应用程序中采用SwiftUI时要考虑的事项 (Things to Consider When Adopting SwiftUI in a UIKit Application)

It’s important to know that you can only use SwiftUI in iOS 13 and up. On top of that, SwiftUI is a new technology that’s been improved in later updates. Dropping iOS 12 means you can start with SwiftUI but it also means that you start using the first version of SwiftUI. This could lead to unexpected behavior and bugs from the early days.

重要的是要知道您只能在iOS 13及更高版本中使用SwiftUI。 最重要的是,SwiftUI是一项新技术,在以后的更新中得到了改进。 删除iOS 12意味着您可以从SwiftUI开始,但这也意味着您开始使用SwiftUI的第一个版本。 从早期开始,这可能会导致意外行为和错误。

将SwiftUI仅用于新功能 (Using SwiftUI for new features only)

You could decide to use SwiftUI for new features only. This is possible even if you’re not dropping iOS 12. You will use the available APIs which makes your newly written views available only on the versions that support SwiftUI.

您可以决定仅将SwiftUI用于新功能。 即使您没有删除iOS 12,这也是可能的。您将使用可用的API,这些API使新编写的视图仅在支持SwiftUI的版本上可用。

if #available(iOS 13.0, *) {
presentSwiftUIView()
} else {
// Fallback on earlier versions
}

You can decide to deliver new features with SwiftUI, which future-proofs your code as it removes the need to rewrite it in a few years. This obviously only works if you can decide to make a certain feature only available to users on iOS 13 and up.

您可以决定使用SwiftUI提供新功能,因为它可以在未来几年内对代码进行过时验证,因为它无需在几年内重写代码。 很明显,这只有在您可以决定使某些功能仅对iOS 13及更高版本的用户可用时才有效。

在UIKit视图控制器中呈现SwiftUI视图 (Presenting a SwiftUI View in a UIKit View Controller)

Once you have a feature you’d like to develop with SwiftUI it’s time to integrate it using the SwiftUI framework. SwiftUI introduced an instance called UIHostingController that takes the responsibility of "hosting" a SwiftUI view.

一旦拥有了要使用SwiftUI开发的功能,就可以使用SwiftUI框架进行集成了。 SwiftUI引入了一个名为UIHostingController的实例,该实例负责“托管” SwiftUI视图。

UIHostingController itself inherits from UIViewController which makes it possible to work with it just as you would with any other view controller instance. So, the code to present a SwiftUI view is as simple as this:

UIHostingController本身继承自UIViewController ,这使其可以像处理任何其他视图控制器实例一样使用它。 因此,呈现SwiftUI视图的代码很简单:

func presentSwiftUIView() {
let swiftUIView = SwiftUIView()
let hostingController = UIHostingController(rootView: swiftUIView)
present(hostingController, animated: true, completion: nil)
}

将SwiftUI视图添加到UIKit视图 (Adding a SwiftUI View to a UIKit View)

The same technique applies to adding a SwiftUI view to a UIKit view hierarchy. The only difference is you’re not presenting the view but adding it as a child view controller:

相同的技术适用于将SwiftUI视图添加到UIKit视图层次结构。 唯一的区别是您不显示视图,而是将其添加为子视图控制器:

There are a few things that we do here:

我们在这里做了几件事:

  • First, we add the hosting controller as a child to the current view controller.

    首先,我们将托管控制器作为子级添加到当前视图控制器中。
  • The view is added to the view hierarchy of the current view controller.

    该视图将添加到当前视图控制器的视图层次结构中。
  • Constraints are set up in code to update the boundaries of our SwiftUI view. You can learn more about writing Auto Layout in code here.

    在代码中设置了约束,以更新SwiftUI视图的边界。 您可以在此处了解有关在代码中编写自动布局的更多信息。

  • The hosting controller is notified that its containing SwiftUI view has moved to a parent.

    通知主机控制器其包含的SwiftUI视图已移至父级。

创建扩展以简化添加SwiftUI视图 (Creating an Extension to Simplify Adding SwiftUI Views)

To make this more efficient we can wrap this logic inside an extension on UIViewController. This allows us to write the same code above as follows:

为了提高效率,我们可以将此逻辑包装在UIViewController的扩展中。 这使我们可以编写与上面相同的代码,如下所示:

func addSwiftUIView() {
let swiftUIView = SwiftUIView()
addSubSwiftUIView(swiftUIView, to: view)
}

The extension for this looks mostly the same as our code before:

扩展名与我们之前的代码大致相同:

This makes it really easy to add views to your UIKit view hierarchy and even allows you to add SwiftUI views to container views defined in the interface builder.

这使得将视图添加到UIKit视图层次结构非常容易,甚至允许您将SwiftUI视图添加到在界面构建器中定义的容器视图。

结论 (Conclusion)

Adding SwiftUI views in a UIKit application early will make your future self a lot happier as you won’t have to rewrite it later. With a simple UIViewController extension method, you can easily add a view with just a few lines of code. Decide whether or not you can build a new feature with SwiftUI and make use of the UIHostingController to present SwiftUI views.

尽早在UIKit应用程序中添加SwiftUI视图将使您以后的生活更快乐,因为您以后不必重写它。 使用简单的UIViewController扩展方法,只需几行代码即可轻松添加视图。 决定是否可以使用SwiftUI构建新功能,并利用UIHostingController呈现SwiftUI视图。

If you like to improve your SwiftUI knowledge further, check out the SwiftUI category page.

如果您想进一步提高SwiftUI的知识,请查看SwiftUI类别页面

Thanks!

谢谢!

翻译自: https://medium.com/better-programming/integrating-swiftui-with-uikit-apps-for-early-adoption-1d8668442ae5

uikit2 uikit3

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值