当前位置: 首页 > 面试题库 >

在许多表达式中使用“ if let…”

印飞捷
2023-03-14
问题内容

Swift的这个成语很有道理

if let x = someDict[someKey] { ... }

但是,我 真正 想要的是

if let x = someDict[someKey], y = someDict[someOtherKey] { ... }

如所写,这不是不正确的,但是这个想法可行吗?


问题答案:

Swift 1.2更新

从Swift 1.2开始,if let允许展开多个可选选项,因此您现在可以编写此代码,如示例所示:

if let x = someDict[someKey], y = someDict[someOtherKey] { … }

您甚至可以交错条件,例如:

if let x = someDict[someKey] where x == "value", y = someDict[someOtherKey] { … }

以前在Swift 1.2之前有效

这是在没有难看的强制包扎的情况下的方法:

switch (dict["a"], dict["b"]) {
case let (.Some(a), .Some(b)):
    println("match")
default:
    println("no match")
}

实际上,它仍然很冗长。

之所以Type?可行Optional<Type>,是因为表单的可选类型实际上是的简写形式,它是一个大致如下所示的枚举:

enum Optional<T> {
    case None
    case Some(T)
}

然后,您可以像其他任何枚举一样使用模式匹配。

编辑: 我见过人们写这样的帮助器函数(对不起归因,我不记得我在哪里看到的):

func unwrap<A, B>(a: A?, b: B?) -> (A, B)? {
    switch (a, b) {
    case let (.Some(a), .Some(b)):
        return (a, b)
    default:
        return nil
    }
}

然后,您可以继续使用if let构造,即像这样:

if let (a, b) = unwrap(dict["a"], dict["b"]) {
    println("match: \(a), \(b)")
} else {
    println("no match")
}


 类似资料:
  • 问题内容: 大家好,所以我试图允许一些文本输入在发送之前经过正则表达式检查。我希望文本仅包含AZ,0-9和空格“”字符。现在是我的代码: 但是,当我输入“这是一个测试”之类的内容时,这仍然会给出结果 有任何想法吗?谢谢大家 问题答案: 您不在正则表达式中包含空格。请尝试以下操作:

  • 作为背景,如果我想比较两个字段,我不能使用以下语法(因为它比较的是文字字符串“$lastname”,而不是$lastname字段的内容): 我得用这个: 如果我想测试一个字段是否存在,我必须使用第一种格式: 我认为用后一种格式表达$exists运算符的正确方法会引发错误: 这是否意味着至少在某些情况下不可能组合这些操作?具体地说,假设我想查找存在$fullname$或$firstname$ne$l

  • 问题内容: var ss= “ ddd”; var arr= ss.match( /<pre.*?<\/pre>/gm ); alert(arr); // null 我希望可以拾取PRE块,即使它跨越换行符也是如此。我以为’m’标志可以做到。才不是。 所以解决方案是: 有谁不那么神秘吗? 编辑:这是重复的,但是由于它比我的更难找到,因此我不会删除。 它建议作为“多行点”。我仍然不明白的是为什么不起

  • 问题内容: 我有一个带有div的html页面,这些div的 ID 为 s1 , s2 等形式。 我想将CSS属性应用于这些部分/ div的子集(取决于id)。但是,每次添加 div时 ,都必须像这样分别为该部分添加css。 css中是否有类似正则表达式的内容,可用于将样式应用于一组 div 。 问题答案: 您可以设法选择那些元素而无需任何形式的正则表达式,如先前的答案所示,但是要直接回答问题,可以

  • 问题内容: 我有一个模式定义为的猫鼬模型- 并且模型定义为- 现在我想从请求对象参数中搜索标题,标签,描述字段,例如 现在,我如何确保也包括任何在标题或描述中找到该术语的结果,而不仅是两个结果都存在。另外,如何在标签数组中搜索匹配的字符串 问题答案: 您可以在猫鼬中使用 $ or 运算符返回匹配项 $ or http://docs.mongodb.org/manual/reference/oper

  • 主要内容:语法,示例if表达式也允许进行一次评估(计算)多个表达式。在 Erlang 这个语句的一般形式显示在下面的程序 - 语法 在 Erlang 中,条件是计算结果为真或假的表达式。如果条件为真,则 statement#1 会被执行。否则评估(计算)下一个条件表达式等等。如果没有一个表达式的计算结果为真,那么 defaultstatement 评估(计算)。 下图是上面给出的语句的一般流程示意图: 下面的程序是在