Generic Operator

??(_:_:)

Performs a nil-coalescing operation, returning the wrapped value of an Optional instance or a default Optional value. nil合体演算を実行します、ラップされた値のOptionalインスタンスまたは省略時のOptional値を返します。

Declaration 宣言

func ?? <T>(optional: T?, defaultValue: @autoclosure () throws -> T?) rethrows -> T?

Parameters パラメータ

optional

An optional value. オプショナル値。

defaultValue

A value to use as a default. defaultValue and optional have the same type. 省略時のものとして使うための値。defaultValueoptionalは同じ型を持ちます。

Discussion 解説

A nil-coalescing operation unwraps the left-hand side if it has a value, or returns the right-hand side as a default. The result of this operation will be the same type as its arguments. nil合体演算は、左手側をそれが値を持つならばアンラップします、または右手側を省略時のものとして返します。この演算の結果は、それの引数と同じ型になります。

This operator uses short-circuit evaluation: optional is checked first, and defaultValue is evaluated only if optional is nil. For example: この演算子は、短絡評価を使います:optionalが最初に調べられます、そしてdefaultValueoptionalnilである場合にのみ評価されます。例えば:


let goodNumber = Int("100") ?? Int("42")
print(goodNumber)
// Prints "Optional(100)"


let notSoGoodNumber = Int("invalid-input") ?? Int("42")
print(notSoGoodNumber)
// Prints "Optional(42)"

In this example, goodNumber is assigned a value of 100 because Int("100") succeeds in returning a non-nil result. When notSoGoodNumber is initialized, Int("invalid-input") fails and returns nil, and so Int("42") is called to supply a default value. この例において、goodNumber100の値を割り当てられます、なぜならInt("100")が非nilの結果を返すことに成功するからです。notSoGoodNumberが初期化されるとき、Int("invalid-input")は失敗してnilを返します、そうするとInt("42")が呼び出されて省略時の値を提供します。

Because the result of this nil-coalescing operation is itself an optional value, you can chain default values by using ?? multiple times. The first optional value that isn’t nil stops the chain and becomes the result of the whole expression. The next example tries to find the correct text for a greeting in two separate dictionaries before falling back to a static default. このnil合体演算の結果がそれ自体オプショナル値であることから、あなたは幾らかの省略時の値を??を複数回使うことで連鎖することができます。nilでない最初のオプショナル値は、連鎖を停止して、式全体の結果となります。次の例は、挨拶として正しいテキストを2つの独立した辞書から見つけることをある静的な省略時のものに落ち着く前に試みます。


let greeting = userPrefs[greetingKey] ??
    defaults[greetingKey] ?? "Greetings!"

If userPrefs[greetingKey] has a value, that value is assigned to greeting. If not, any value in defaults[greetingKey] will succeed, and if not that, greeting will be set to the non-optional default value, "Greetings!". userPrefs[greetingKey]が値を持つならば、その値はgreetingに割り当てられます。そうでないならば、defaults[greetingKey]の中の何らかの値が後を継ぎます、そしてそれもないならば、greetingは非オプショナルの省略時の値、"Greetings!"に設定されます。

See Also 参照

Coalescing Nil Values nil値の合体