尽管Xcode预览版正在迅速成为构建SwiftUI视图时进行快速迭代和原型设计的首选开发工具,但在某些情况下,启动Swift操场可能是尝试新UI想法的最快速和最简单的方法。
使用UIHostingController
在操场的实时视图中渲染SwiftUI视图的方法之一是将其包裹在一个UIHostingController ,然后可以将其分配给当前PlaygroundPage 的liveView 属性--例如,像这样:
import SwiftUI
import PlaygroundSupport
struct MyExperimentalView: View {
var body: some View {
...
}
}
let view = MyExperimentalView()
let hostingVC = UIHostingController(rootView: view)
PlaygroundPage.current.liveView = hostingVC
调用setLiveView
尽管上述设置无论如何都不是超级冗长的,但事实证明,有一个更简单的方法来执行上述liveView 赋值--那就是使用setLiveView 方法,该方法基本上执行了与我们上面所做的完全相同的UIHostingController 包装,但其方式不需要我们编写任何额外代码:
import SwiftUI
import PlaygroundSupport
struct MyExperimentalView: View {
var body: some View {
...
}
}
let view = MyExperimentalView()
PlaygroundPage.current.setLiveView(view)
将视图钉在操场的时间线上
虽然上述两种方法在许多不同的情况下都很好用,但绝对有可能遇到各种SwiftUI错误,这些错误似乎只发生在渲染操场内的视图时。值得庆幸的是,如果你真的遇到了这些错误,还有第三种选择,它可能是令人惊讶的强大。
Swift游乐场从第一天起就支持的一个功能是,任何数值都可以被钉在游乐场的时间线上,这使我们能够以各种方式可视化我们表达式的结果。就 SwiftUI 视图而言,钉住View 表达式实际上会导致该视图在 Xcode 的代码编辑器中被内联呈现。
例如,如果我们使用右侧时间线中的矩形图标来钉住我们上面的MyExperimentalView() 表达式,它现在就会像这样被内联呈现。

最后一项技术最酷的地方在于它使我们能够同时渲染多个视图,就像我们使用Xcode的预览功能一样。
总结
所以,你有了它。三种不同的方法来渲染游乐场中的SwiftUI视图。我几乎每天都在使用playgrounds。作为一个经常试验UI开发和其他Swift技术的人,我发现playgrounds是一个非常方便的工具,因为我不必为了尝试一个快速的想法而创建一个完整的Xcode项目。
谢谢你的阅读!