前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SwiftUI:alert() 和 sheet() 与可选值一起使用

SwiftUI:alert() 和 sheet() 与可选值一起使用

作者头像
韦弦zhy
发布2021-01-18 11:11:04
2.4K0
发布2021-01-18 11:11:04
举报
文章被收录于专栏:韦弦的偶尔分享
\color{red}{\Large \mathbf{Hacking \quad with \quad iOS: SwiftUI \quad Edition}}
\color{red}{\Large \mathbf{Hacking \quad with \quad iOS: SwiftUI \quad Edition}}

SwiftUI有两种创建警报和表单的方式,到目前为止,我们仅使用一种方法:绑定到布尔值,该布尔值在变为 true 时显示 Alert 或 Sheet。

第二种方法并不经常使用,但是在您需要的时候它确实有用:您可以使用可选的Identifiable对象作为条件,并且当该对象具有值时将显示 Alert 或Sheet 。它的闭包将为您提供用于条件的非可选值,因此您可以安全地使用它。

为了说明这一点,我们可以创建一个符合Identifiable协议的简易的User结构体:

代码语言:javascript
复制
struct User: Identifiable {
    var id = "Taylor Swift"
}

然后,我们可以在ContentView中创建一个属性,以跟踪选择了哪个用户,默认情况下设置为 nil

代码语言:javascript
复制
@State private var selectedUser: User? = nil

现在,我们可以更改ContentViewbody,以便在点击其文本视图时将selectedUser设置为一个值,然后再为selectedUser提供值时使用alert(item:)显示警报:

代码语言:javascript
复制
Text("Hello, World!")
    .onTapGesture {
        self.selectedUser = User()
    }
    .alert(item: $selectedUser) { user in
        Alert(title: Text(user.id))
    }

使用该简单代码,每当您点击“ Hello,World!”出现提示“Taylor Swift”的警报。解除警报后,SwiftUI会将selectedUser设置为nil

这似乎是一个简单的功能,但是比其他功能更简单,更安全。如果我们要使用旧的.alert(isPresente:)修饰符来重写上述代码,它将看起来像这样:

代码语言:javascript
复制
struct ContentView: View {
    @State private var selectedUser: User? = nil
    @State private var isShowingAlert = false

    var body: some View {
        Text("Hello, World!")
            .onTapGesture {
                self.selectedUser = User()
                self.isShowingAlert = true
            }
            .alert(isPresented: $isShowingAlert) {
                Alert(title: Text(selectedUser!.id))
            }
    }
}

那是另一个属性,在onTapGesture()中设置另一个值,并在alert()修饰符中强制展开——如果您可以避免这些事情的话那随你好了。

参考 Alert弹窗 SwiftUI:ActionSheet 弹窗 SwiftUI:Sheet 视图

译自 Using alert() and sheet() with optionals

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档