虽然 SwiftUI 在 Xcode Previews 里已经很方便了,但是如果有的场合只需要简单的 UI 调试,也可以在 Playground 中尝试。Playground 中也可以很好的兼容 SwiftUI View。
主要有两种方式:
UIHostingController
SwiftUI view 可以包在 UIHostingController 来让 UIKit 调用。因此可以通过 UIHostingController 来支持预览:
import SwiftUI
import PlaygroundSupport
struct MyExperimentalView: View {
var body: some View {
...
}
}
let view = MyExperimentalView()
let hostingVC = UIHostingController(rootView: view)
PlaygroundPage.current.liveView = hostingVC
setLiveView
PlaygroundPage 新增了一个面向 SwiftUI View 的 setLiveView 方法,SwiftUI view 可以直接作为参数传进去,就可以支持渲染:
import SwiftUI
import PlaygroundSupport
struct MyExperimentalView: View {
var body: some View {
...
}
}
let view = MyExperimentalView()
PlaygroundPage.current.setLiveView(view)
其他
如果希望 Playground 更加积极的渲染 view,可以配置 PlaygroundPage.current.needsIndefiniteExecution = true 。
在 Sundell 博客文章(2021.5)里,他提到可以在 timeline 中把 view pin住,这样在代码下面会插入一个预览视图,也可以渲染出 SwiftUI 的 view:
但是我在当前版本的 Playground 中(Xcode 14.3),SwiftUI view 已经不会被当做视图渲染:

总结
在 Playground 中展示的 SwiftUI view 不能调节预览参数。相比在 Xcode 中能力还是差了不少,感觉只有在非常简单的实验性 UI 中才有使用的必要。