我的WidgetBundle类中有下面的代码,但是我想删除@available标记,因为如果用户不是iOS 16,他们将根本无法访问主屏幕或锁定屏幕小部件。
struct WidgetBundler: WidgetBundle {
@WidgetBundleBuilder
var body: some Widget {
HomeScreenWidget()
LockScreenWidget()
}
}编译器不喜欢这段代码,这是我唯一能想到的解决这个问题的方法:
struct WidgetBundler: WidgetBundle {
@WidgetBundleBuilder
var body: some Widget {
if #available(iOSApplicationExtension 16, *) {
HomeScreenWidget()
LockScreenWidget()
} else {
HomeScreenWidget()
}
}
}如何删除@available标记并获取它,以便用户可以访问主屏幕小部件,即使在iOS 14和15上也是如此?
发布于 2022-09-13 20:44:46
这个解决方案的工作原理是:
@main
struct WidgetsBudle: WidgetBundle {
var body: some Widget {
if #available(iOSApplicationExtension 16.0, *) {
return ios16Widgets
} else {
return ios14Widgets
}
}
@WidgetBundleBuilder
var ios14Widgets: some Widget {
HomeScreenWidget()
}
@WidgetBundleBuilder
var ios16Widgets: some Widget {
HomeScreenWidget()
LockScreenWidget()
}
}发布于 2022-10-31 08:26:20
您可以使用阿凡达莉中提到的这种方法
@main
struct WidgetsBudler: WidgetBundle {
@WidgetBundleBuilder
var body: some Widget {
widgets()
}
func widgets() -> some Widget {
if #available(iOS 16.0, *) {
return WidgetBundleBuilder.buildBlock(HomeScreenWidget(),
LockScreenWidget())
} else {
return HomeScreenWidget()
}
}
}https://stackoverflow.com/questions/73159932
复制相似问题