运行 在 Xcode 模拟器上预览
Run previews on Xcode simulator
我正在使用 Xcode 11 来测试 swiftUI,但我无法让我的 Content_Previews 正常工作。我的代码类似于introductory talk given by Apple。
由于我没有 MacOS Catalina,我正在使用模拟器和真实设备对此进行测试。我无法使用我的 testData 查看 DEBUG 预览。
ContentView.swift 看起来像:
import SwiftUI
struct ContentView: View {
var devices: [Device] = []
var body: some View {
NavigationView {
List(devices) { device in
Image(systemName: "gamecontroller")
VStack() {
Text(device.name)
if(device.isConnected){
Text("Connected").font(.subheadline).foregroundColor(.secondary)
}else{
Text("Not Connected").font(.subheadline).foregroundColor(.secondary)
}
}
}
.navigationBarTitle(Text("Devices"))
}
}
}
#if DEBUG
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView(devices: testData)
}
}
#endif
那么,设备结构如下:
import SwiftUI
struct Device : Identifiable {
var id = UUID()
var name: String
var isConnected: Bool = false
}
let testData = [
Device(name: "devA"),
Device(name: "devB"),
Device(name: "devC")
]
不知何故,ContentView_Previews 没有执行,即使 DEBUG 开启。 (我测试了这个放置条件文本视图)。知道出了什么问题吗?我的猜测是 PreviewProvider ContentView_Previews
没有被调用,我缺少一些配置。
Xcode 仅支持 macOS Catalina (10.15) 或更高版本上的 SwiftUI 预览。它可以在 Mojave 上编译符合 PreviewProvider
的类型,但不会渲染它们。
有两种方法可以在 Mojave 上渲染 SwiftUI 视图:在模拟器中(如您所见),或在 playground 中。
这是一个示例 iOS playground,它适用于 macOS Mojave 10.14.6 上的 Xcode 11 beta 4:
import SwiftUI
struct ContentView: View {
var body: some View {
VStack {
Text(verbatim: "Hello \(ProcessInfo.processInfo.operatingSystemVersionString)")
.lineLimit(nil)
.padding()
.background(Color.pink.opacity(0.2).cornerRadius(12))
.border(Color.red, width: 2, cornerRadius: 12)
}
}
}
import PlaygroundSupport
let host = UIHostingController(rootView: ContentView())
host.preferredContentSize = .init(width: 200, height: 200)
PlaygroundPage.current.liveView = host
结果:
我正在使用 Xcode 11 来测试 swiftUI,但我无法让我的 Content_Previews 正常工作。我的代码类似于introductory talk given by Apple。
由于我没有 MacOS Catalina,我正在使用模拟器和真实设备对此进行测试。我无法使用我的 testData 查看 DEBUG 预览。
ContentView.swift 看起来像:
import SwiftUI
struct ContentView: View {
var devices: [Device] = []
var body: some View {
NavigationView {
List(devices) { device in
Image(systemName: "gamecontroller")
VStack() {
Text(device.name)
if(device.isConnected){
Text("Connected").font(.subheadline).foregroundColor(.secondary)
}else{
Text("Not Connected").font(.subheadline).foregroundColor(.secondary)
}
}
}
.navigationBarTitle(Text("Devices"))
}
}
}
#if DEBUG
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView(devices: testData)
}
}
#endif
那么,设备结构如下:
import SwiftUI
struct Device : Identifiable {
var id = UUID()
var name: String
var isConnected: Bool = false
}
let testData = [
Device(name: "devA"),
Device(name: "devB"),
Device(name: "devC")
]
不知何故,ContentView_Previews 没有执行,即使 DEBUG 开启。 (我测试了这个放置条件文本视图)。知道出了什么问题吗?我的猜测是 PreviewProvider ContentView_Previews
没有被调用,我缺少一些配置。
Xcode 仅支持 macOS Catalina (10.15) 或更高版本上的 SwiftUI 预览。它可以在 Mojave 上编译符合 PreviewProvider
的类型,但不会渲染它们。
有两种方法可以在 Mojave 上渲染 SwiftUI 视图:在模拟器中(如您所见),或在 playground 中。
这是一个示例 iOS playground,它适用于 macOS Mojave 10.14.6 上的 Xcode 11 beta 4:
import SwiftUI
struct ContentView: View {
var body: some View {
VStack {
Text(verbatim: "Hello \(ProcessInfo.processInfo.operatingSystemVersionString)")
.lineLimit(nil)
.padding()
.background(Color.pink.opacity(0.2).cornerRadius(12))
.border(Color.red, width: 2, cornerRadius: 12)
}
}
}
import PlaygroundSupport
let host = UIHostingController(rootView: ContentView())
host.preferredContentSize = .init(width: 200, height: 200)
PlaygroundPage.current.liveView = host
结果: