首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SwiftUI:绑定到@AppStorage

SwiftUI:绑定到@AppStorage
EN

Stack Overflow用户
提问于 2021-07-18 01:05:21
回答 1查看 90关注 0票数 0

在下面的示例中,如何根据SwiftUI更新aArrivedbArrived的方式来更改activeSheet的值

代码语言:javascript
复制
struct ContentView: View {

    @AppStorage("didAArrive") var aArrived: Bool = false
    @AppStorage("didBArrive") var bArrived: Bool = false

    enum ActiveSheet: Identifiable {
        case aArrived, bArrived

        var id: Int {
            hashValue
        }
    }

    @State private var activeSheet: ActiveSheet?

    var body: some View {
        Text("Hello")
            .sheet(
                item: $activeSheet,
                content: { item in
                    switch item {
                    case .aArrived:
                        Text("A arrived")
                    case .bArrived:
                        Text("B arrived")
                    }
                }
            )
    }
}
EN

回答 1

Stack Overflow用户

发布于 2021-07-18 06:40:10

您可以为根据aArrivedbArrived获取其值的工作表创建自定义绑定。绑定值将基于aArrivedbArrived进行初始化,并在每次更改时进行更新。

代码语言:javascript
复制
struct ContentView: View {

    @AppStorage("didAArrive") var aArrived: Bool = false
    @AppStorage("didBArrive") var bArrived: Bool = false

    enum ActiveSheet: Identifiable {
        case aArrived, bArrived

        var id: Int {
            hashValue
        }
    }

    var body: some View {
        let sheetBinding = Binding<ActiveSheet?>(
            get: {
                if aArrived && bArrived {
                    return ActiveSheet.aArrived
                } else if aArrived {
                    return ActiveSheet.aArrived
                } else if bArrived {
                    return ActiveSheet.bArrived
                } else {
                    return nil
                }
            },
            set: { _ in }
        )
        VStack(spacing: 20) {
            Toggle("A arrived", isOn: $aArrived)
            Toggle("B arrived", isOn: $bArrived)
        }
        .sheet(
            item: sheetBinding,
            content: { item in
                switch item {
                case .aArrived:
                    Text("A arrived")
                case .bArrived:
                    Text("B arrived")
                }
            }
        )
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68422631

复制
相关文章

相似问题

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