在之前的 Xcode 版本中支持了对 swiftUI 的 preview(实时预览) 功能,支持在不打开模拟器的情况下预览代码效果,修改之后也会立即看到更新,非常方便。
在 Xcode 15 中的 swift 5.9 里,支持了 macro (宏)语法,其中的 #Preview 宏让预览功能更加简单和强大。
使用方法:
先看下旧版本的预览使用方式:
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
新版本的预览只需要用 #Preview {} 即可:
#Preview {
ContentView()
}
另外 #Preview {} 不仅支持 swiftUI,还支持 UIKit,比如预览一个 UISwitch 开关:
#Preview {
UISwitch()
}

不仅支持 UIView,还支持直接预览控制器:
#Preview {
MyViewController()
}

或者直接从 SB 中读取控制器来预览:
#Preview {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
return storyboard.instantiateViewController(withIdentifier: "ViewController")
}
这么好用的功能,目前看是 iOS 17 才能使用的,不知道在正式版上会不会向前兼容一下。
@available(iOS 17.0, macOS 14.0, tvOS 17.0, *)
@freestanding(declaration) public macro Preview(_ name: String? = nil, traits: PreviewTrait<Preview.ViewTraits>..., body: @escaping () -> UIViewController) -> () = #externalMacro(module: "PreviewsMacros", type: "Common")
另外,你还可以通过 name 参数和 traits 参数来尝试一些更高级的用法:
#Preview("横屏", traits: PreviewTrait.landscapeLeft) {
UISwitch()
}
#Preview("竖屏", traits: PreviewTrait.portrait) {
UISwitch()
}
#Preview("正方形窗口", traits: PreviewTrait.fixedLayout(width: 500, height: 500)) {
UISwitch()
}

点击下方公众号卡片,关注我,每天分享一个关于 iOS 的新知识
本文同步自微信公众号 “iOS新知”,每天准时分享一个新知识,这里只是同步,想要获得更好的体验就扫描下方二维码关注我吧!
