LoginSignup
21
19

More than 5 years have passed since last update.

"右辺値がnilでなければ左辺値に代入する"演算子を定義する

Posted at

Swiftで、"右辺値がnilでなければ左辺値に代入したい"ということがありました。
これを素直に書くと以下のようなコードになると思います。

if let value = value {
    self.value = value
}

うーん、なんだかイケてない感じがします。
数が多くなってくると結構面倒ですし、読みにくくもなってしまいます。
そこで、"右辺値がnilでなければ左辺値に代入する"演算子?=を定義してみます。

infix operator ?= {}

func ?= <T> (inout lhs: T, rhs: T?) -> Void {
    if let rhs = rhs {
        lhs = rhs
    }
}

これで最初のコードは以下のように簡潔に書けます。

self.value ?= value

敢えて名前をつけるとOptional Assignment Operatorといったところでしょうか。

Swiftでは自由度の高い演算子定義や後置クロージャのおかげで、マクロなどを使うことなく安全かつ柔軟に記法を拡張して、イカした感じの記述ができるので良いですね。
無論乱用すると良くないかも知れませんが、適切に使えば利得は大きいのではないかと思います。

それでは、皆さんも用法用量を守って演算子を定義し、快適なSwiftライフを!

21
19
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
19