怎样在 Playground 中预览 SwiftUI view

2,138 阅读1分钟

虽然 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:

image.png

但是我在当前版本的 Playground 中(Xcode 14.3),SwiftUI view 已经不会被当做视图渲染:

Image.png

总结

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


引用:Three ways to render a SwiftUI view in a playground