swift - swift中 "??"是什么意思?

标签 swift syntax

<分区>

我在 Swift 中遇到了使用双问号(“??”)的语法。

例如,让 val = something["something"] as?字符串 ??无

这到底是什么意思?这种语法有哪些用例?

最佳答案

零合并运算符

这是一种简短的形式。 (意味着您可以分配默认值 nil 或任何其他值,如果 something["something"]nil 或可选)

let val = (something["something"] as? String) != nil ? (something["something"] as! String) : "default value"

nil 合并运算符 (a ?? b) 如果可选 a 包含值,则展开它;如果 a 为 nil,则返回默认值 b。表达式 a 始终是可选类型。表达式 b 必须匹配存储在 a 中的类型。

nil-coalescing 运算符是以下代码的简写:

一个!=零?一个! : 乙 上面的代码使用三元条件运算符和强制展开 (a!) 来访问在 a 不为 nil 时包裹在 a 中的值,否则返回 b。 nil-coalescing 运算符提供了一种更优雅的方式来以简洁易读的形式封装此条件检查和展开。

如果 a 的值非零,则不评估 b 的值。这称为短路评估。

下面的示例使用 nil-coalescing 运算符在默认颜色名称和可选的用户定义颜色名称之间进行选择:

let defaultColorName = "red"
var userDefinedColorName: String?   // defaults to nil

var colorNameToUse = userDefinedColorName ?? defaultColorName
// userDefinedColorName is nil, so colorNameToUse is set to the default of "red"

参见 Nil-Coalescing Operator here 部分

关于swift - swift中 "??"是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47362914/

相关文章:

c - 在 C 语法中返回指向函数的指针

javascript - '=' 运算符在这种情况下做什么? sqrtf(1 - (t = t/d - 1) * t);

从 WatchOS 捕获 Apple Watch 的型号标识符

Java反射(reflect)Class.forName失败

c - : 和有什么区别

postgresql - 从postgresql中的内置函数和用户定义函数中进行选择的区别

ios - 滚动时未调用 sizeForItemAt

ios - 快速字典错误

ios - NSPredicate 格式动态使用属性名称

json - 为什么从 JSON 返回的值不能与 NSNull 相比较?