首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何删除此Swift结构中的@available标记?

如何删除此Swift结构中的@available标记?
EN

Stack Overflow用户
提问于 2022-07-28 22:45:38
回答 2查看 124关注 0票数 1

我的WidgetBundle类中有下面的代码,但是我想删除@available标记,因为如果用户不是iOS 16,他们将根本无法访问主屏幕或锁定屏幕小部件。

代码语言:javascript
复制
struct WidgetBundler: WidgetBundle {
    
    @WidgetBundleBuilder
    var body: some Widget {
        HomeScreenWidget()
        LockScreenWidget()
    }
}

编译器不喜欢这段代码,这是我唯一能想到的解决这个问题的方法:

代码语言:javascript
复制
struct WidgetBundler: WidgetBundle {
    
    @WidgetBundleBuilder
    var body: some Widget {
        if #available(iOSApplicationExtension 16, *) {
            HomeScreenWidget()
            LockScreenWidget()
        } else {
            HomeScreenWidget()
        }
    }
}

如何删除@available标记并获取它,以便用户可以访问主屏幕小部件,即使在iOS 14和15上也是如此?

EN

回答 2

Stack Overflow用户

发布于 2022-09-13 20:44:46

这个解决方案的工作原理是:

代码语言:javascript
复制
@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()
    }

}
票数 2
EN

Stack Overflow用户

发布于 2022-10-31 08:26:20

您可以使用阿凡达莉中提到的这种方法

代码语言:javascript
复制
    @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()
            }
        }
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73159932

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档