isPlaceholder 修饰符不可用,并且在小部件套件 + SwiftUI 中不起作用

Arn*_*ani 2 wwdc swift widgetkit swiftui

我正在跟踪 Fromm wwdc 2020 上的小部件代码,在第一部分中他们提到使用新的占位符 api 和.isPlacholder. 所以我尝试在我的小部件中实现它,如下所示:

struct PlaceholderView: View {
    var body: some View {
        RandomWidgetView(book: testBook)
            .isPlaceholder(true)
    }
}
Run Code Online (Sandbox Code Playgroud)

但是我得到了错误Value of type 'RandomWidgetView' has no member 'isPlaceholder'。谷歌搜索后我发现了这个:

struct PlaceholderView: View {
    var body: some View {
        RandomWidgetView(book: testBook)
            .redacted(reason: .placeholder)
    }
}
Run Code Online (Sandbox Code Playgroud)

然而,这并没有创建正确的占位符,而是完全删除了内部的视图。

我是否缺少导入或者自 wwdc 以来它已更改?如何创建正确的占位符?

Dan*_*ary 7

在您的 Widget 扩展中,您应该具有如下所示的代码,正如我在这里所看到的,这只是默认的 Widget 实现。如果您将其放置.redacted(reason: .placeholder)在您拥有的视图中,Provider.Entry它应该会为您提供所需的结果。

// other TimelineProvider code...

struct RandomWidgetViewEntryView: View {
    var entry: Provider.Entry

    var body: some View {
        Text(entry.date, style: .time)
            .redacted(reason: .placeholder)
    }
}

@main
struct RandomWidgetView: Widget {
    let kind: String = "RandomWidgetView"

    var body: some WidgetConfiguration {
        StaticConfiguration(kind: kind, provider: Provider()) { entry in
            RandomWidgetViewEntryView(entry: entry)
        }
        .configurationDisplayName("My Widget")
        .description("This is an example widget.")
    }
}
Run Code Online (Sandbox Code Playgroud)

占位符图像视图