使用 Swift if let 和逻辑 AND 运算符 &&

2024-01-09

我们知道我们可以使用if let语句作为速记来检查可选的 nil 然后展开。

但是,我想使用逻辑 AND 运算符将其与另一个表达式结合起来&&.

因此,例如,在这里我进行可选的链接来展开并可选地将我的 rootViewController 向下转换为 tabBarController。但我不想使用嵌套的 if 语句,而是将它们组合起来。

if let tabBarController = window!.rootViewController as? UITabBarController {
    if tabBarController.viewControllers.count > 0 {
        println("do stuff")
     }
 }

联合捐赠:

if let tabBarController = window!.rootViewController as? UITabBarController &&
    tabBarController.viewControllers.count > 0 {
        println("do stuff")
     }
}

上面给出了编译错误使用未解析的标识符“tabBarController”

简化:

if let tabBarController = window!.rootViewController as? UITabBarController && true {
   println("do stuff")
}

这会产生编译错误条件绑定中的绑定值必须是Optional类型。尝试了各种语法变体后,每种变体都会给出不同的编译器错误。我还没有找到顺序和括号的最佳组合。

所以,问题是,是否可能,如果可能,正确的语法是什么?

请注意,我想用if陈述not a switch语句或三元组?操作员。


从 Swift 1.2 开始,这现在是可能的. The Swift 1.2 和 Xcode 6.3 beta 发行说明 https://developer.apple.com/swift/blog/?id=22 state:

更强大的可选展开方式if let — if let 构造 现在可以一次打开多个选项,以及包含 介入布尔条件。这可以让你表达条件 控制流程,无需不必要的嵌套。

根据上面的语句,语法将是:

if let tabBarController = window!.rootViewController as? UITabBarController where tabBarController.viewControllers.count > 0 {
        println("do stuff")
}

这使用了where条款。

另一个例子,这次铸造AnyObject to Int,展开可选选项,并检查展开的可选选项是否满足条件:

if let w = width as? Int where w < 500
{
    println("success!")
}

对于那些现在使用 Swift 3 的人来说,“where”已被逗号取代。因此,等价的是:

if let w = width as? Int, w < 500
{
    println("success!")
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Swift if let 和逻辑 AND 运算符 && 的相关文章

随机推荐

  • 构建 Rails 表单来过滤索引页?

    大家好 我在过滤系统中数千个贸易项目的显示时遇到了问题 根据我们正在构建的系统的规格 我们必须有一个表单 允许人们输入开始日期 然后输入以分钟为单位的间隔 以过滤项目的呈现 我已经构建了辅助函数来返回该间隔期内的所有交易 但我一生都无法正确
  • 如何检查列是否已经是外键?

    我有名为 Person 的表和名为 ID 的列 如何检查 ID 是否已经是外键 因为我想用以下代码来实现 ALTER TABLE Person ADD FOREIGN KEY ID REFERENCES Job ID ON DELETE C
  • 如何使用 String.format 将字符串居中?

    public class Divers public static void main String args String format 1 10s 2 10s 3 20s n System out format format First
  • 谷歌地图 v3 热图在页面加载时不显示

    我有一个映射页面 它检索 json 响应并创建相关的点数组来加载热图 所有这些都在所需的初始化查询中 该查询在 jquery document ready 中调用 但奇怪的是 所有外部数据都返回正常并且填充正常 点数组也正常 但是 当我在热
  • Linux 上的 MS SQL Server 通过 PHP 提供非模拟预准备语句支持

    Summary 我正在尝试使用准备好的语句来停止 SQL 注入 但无法找到保证其正常工作所需的支持 Scenario 我在 Linux 上托管一个站点 该站点使用 FreeTDS 版本 0 91 连接到 Microsoft SQL Serv
  • 我什么时候真正需要在 Inno Setup 中使用 ScaleX 和 ScaleY 函数?

    这是文档ScaleX功能 ScaleX https jrsoftware org ishelp topic isxfunc scalex htm 同样的事情是为了ScaleY ScaleY https jrsoftware org ishe
  • Redis 连接池 + Node.js

    Node js 异步 I O 是否需要 Redis 连接池 我看到的大多数 Redis 库都允许您创建客户端连接 但连接池模块并不多 因此我认为它并不那么重要 让我困惑的一件事是 Redis 在一个 Redis 实例中默认有 16 个不同
  • 如何使用 PHP 将 .pdf 文件作为 BLOB 存储到 MySQL 中?

    如何从 PHP 将 pdf 文件作为 BLOB 存储到 MySQL 中 编辑添加 以下代码已过时 无法在 PHP 7 中运行 有关更多详细信息 请参阅答案底部的注释 假设一个由整数 ID 和 blob DATA 列组成的表结构 并假设 My
  • 适用于 x64 的 SQLite3.dll

    从下载sqlite org 下载 https www sqlite org download html 他们提供适用于 Windows 的预编译二进制文件适用于 x86 和 x64 所以 下载的是 def文件和一个 dll文件 使用这两个文
  • 单击侦听器上的通知 RemoteView

    所以 经过一番绞尽脑汁之后 我已经无计可施了 我有一个媒体播放器RemoteViews在我的通知中 我希望能够访问播放 暂停 上一个和下一个按钮 我知道setOnClickPendingIntent 将用于通过通知进行通信 然而 我想知道这
  • 如何从 NSString 中提取/拆分数字和字符串

    我有一个 NSString text randomtext12345 文本字符串始终以 string 未知长度 开头 后跟 number 整数类型 文本之间没有 分隔符 如何检测哪个是字符串还是整数 为了提取 分离 分离出文本成为 NSSt
  • 空节点的非法自关闭节点表示法 - 使用 PHP DOMDocument 输出 XHTML

    我正在 PHP 中使用 XPATH 处理符合 XML 的 XHTML 输入 如下所示 xml new DOMDocument xml gt loadXML utf8 encode temp temp utf8 decode xml gt s
  • 执行到 pod 的 kubernetes RBAC 角色动词

    我的 1 9 集群为开发用户创建了这个部署角色 部署按预期进行 现在我想向开发人员授予执行和日志访问权限 我需要为 pod 添加什么角色 kind Role name deployment manager rules apiGroups e
  • Python del 语句

    Calling delPython 中的变量 这是立即释放分配的内存还是仍在等待垃圾收集器收集 就像在java中一样 显式调用del对何时释放内存没有影响 del 语句不回收内存 它删除引用 从而减少该值的引用计数 如果计数为零 则可以回收
  • 如何在 SonarQube Scanner for Jenkins 中设置 sonar.projectBaseDir?

    我尝试分析 Jenkins 中多模块项目的一个模块SonarQube 扫描仪 https plugins jenkins io sonar插件 2 5 版 不幸的是 Jenkins 选择了错误的模块作为工作目录 在这种特殊情况下 我可以更改
  • 如何测试用户是否选择了要上传的文件?

    在页面上 我有 if empty FILES logo name dossier upload fichier basename FILES logo name taille maxi 100000 taille filesize FILE
  • android.database.sqlite.SQLiteException:没有这样的列

    当我执行此查询时 我得到 android database sqlite SQLiteException 没有这样的列 错误是什么 public Cursor Getupdate String rid throws SQLException
  • JAVA getConstructor 抛出 NoSuchMethodException

    我是JAVA新手 我正在努力学习反射 http tutorials jenkov com java reflection index html 我想获得特定的构造函数 选择示例表单here http tutorials jenkov com
  • 在向上滚动和向下滚动时向菜单添加底部框阴影

    我有一个具有以下 CSS 属性的菜单 header width 100 position fixed z index 9000 overflow auto 因此 根据上面的 CSS 属性 该元素 header 显然无论滚动如何都会保持在顶部
  • 使用 Swift if let 和逻辑 AND 运算符 &&

    我们知道我们可以使用if let语句作为速记来检查可选的 nil 然后展开 但是 我想使用逻辑 AND 运算符将其与另一个表达式结合起来 因此 例如 在这里我进行可选的链接来展开并可选地将我的 rootViewController 向下转换