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

为Swift中的Optional提供默认值?

罗兴运
2023-03-14
问题内容

在Swift中处理可选选项的习惯用法似乎过于冗长,如果您只想在nil为零的情况下提供默认值,则它是:

if let value = optionalValue {
    // do something with 'value'
} else {
    // do the same thing with your default value
}

涉及不必要地复制代码,或

var unwrappedValue
if let value = optionalValue {
    unwrappedValue = value
} else {
    unwrappedValue = defaultValue
}

这不需要unwrappedValue是常数。

Scala的Option monad(与Swift的Optional基本相同)具有getOrElse用于此目的的方法:

val myValue = optionalValue.getOrElse(defaultValue)

我想念什么吗?Swift已经有一种紧凑的方式做到这一点吗?否则,是否可以getOrElse在扩展名中为Optional 定义?


问题答案:

更新资料

苹果现在添加了一个合并运算符

var unwrappedValue = optionalValue ?? defaultValue

在这种情况下,三元运算符是您的朋友

var unwrappedValue = optionalValue ? optionalValue! : defaultValue

您还可以为Optional枚举提供自己的扩展名:

extension Optional {
    func or(defaultValue: T) -> T {
        switch(self) {
            case .None:
                return defaultValue
            case .Some(let value):
                return value
        }
    }
}

然后,您可以执行以下操作:

optionalValue.or(defaultValue)

但是,我建议您坚持使用三元运算符,因为其他开发人员无需研究该or方法即可更快地了解这一点。


:我开始一个模块来添加共同佣工像这样orOptional以迅速。



 类似资料:
  • 在Swift中处理选项的习惯用法似乎过于冗长,如果您只想在值为零的情况下提供一个默认值: 涉及不必要的代码复制,或者 这需要不是常量。 Scala的选项monad(与Swift的可选选项基本相同)的方法是: 我错过什么了吗?斯威夫特已经有了一个紧凑的方法来实现这一点吗?或者,如果做不到这一点,是否可以在可选的扩展中定义?

  • 可能有一个非常明显的答案,但如何做到以下几点: 基本上是从一个类型中检索所有键,以循环通过?

  • 我很想知道为什么Java的可选不提供类似于流的方法。 接口的method javadoc声明: @apiNote此方法主要用于支持调试,您希望在元素流经管道中的某个点时看到这些元素 这几乎完全描述了我的用例: (返回 方法,上述所有内容都会转换为: 也可以这样做(参见此答案): 并将其与方法一起使用: 但我认为这是一个黑客,而不是的干净用法。 从Java 9开始,可以将< code>Optiona

  • 问题内容: 对于我的项目,我必须创建一个代理AppDelegate,该代理将把调用转发到另一个AppDelegate。 UIApplicationDelegate有一个。我的问题是,为什么我不能这样做: 该代码的问题是。 有人知道为什么吗? 问题答案: 该物业的协议,声明如下: 这意味着它是一个 可选属性 (在某种意义上,“ 不需要请求 实现协议的类 来实现/具有此属性 ”,就像 在Objecti

  • 本文向大家介绍vagrant 在Vagrantfile中设置默认提供程序,包括了vagrant 在Vagrantfile中设置默认提供程序的使用技巧和注意事项,需要的朋友参考一下 示例            

  • 标准中似乎没有规则提到模板参数需要默认参数的情况。 在dcl中。fct。默认值#1 如果在参数声明中指定了初始化子句,则将此初始化子句用作默认参数。缺省参数将用于缺少尾随参数的调用。 在本节中,规则明确描述了何时为函数调用提供默认参数。但是,我在标准中没有找到与上面描述何时提供默认参数作为模板参数的语句类似的引用。 例如