LoginSignup
5

More than 5 years have passed since last update.

swiftでpresence()っぽい何か

Last updated at Posted at 2014-12-01

やりたいこと

swiftで、「textが入ってたらその値を使うけど、入ってなかったらデフォルト値を使う」という処理を書いていた。

var text1 = myTextField.text.isEmpty ? "default" : myTextField.text

最近、とにかく変数の名前が長いので(とても良くない)、2回も同じ変数名が出現すると辛い。

presence()

そういえばRailsにはpresenceというメソッドがあったなぁ、と思った。
http://apidock.com/rails/Object/presence
これで逃げてみよう。

swiftで書いてみる

nilであれば右の値を返す、というNil Coalescing Operatorがある。

var hoge = nil ?? "not blank" // => "not blank"

なので、空文字であれば、nilにしてしまうメソッドを作れば良さそう。
以下のようなextensionを書く。

extension String {
  func presence() -> String? {
    return self.isEmpty ? nil : self
  }
}

使ってみた。

var foo = ""

// 以下2つは同じ
foo.isEmpty ? "blank" : foo // => "blank"
foo.presence() ?? "blank" // => "blank"

foo = "not blank"
foo.isEmpty ? "blank" : foo // => "not blank"
foo.presence() ?? "blank" // => "not blank"

うん。動いてるのは動いてる。

だけど、これだと変数の文字数が少ないので、何が嬉しいか全くわからない。文字数の多いやつでやってみる。

var text1:String = myTextFieldInHogeHoge.text.isEmpty ? "default" : myTextFieldInHogeHoge.text
var text2:String = myTextFieldInHogeHoge.text.presence() ?? "default"

若干見やすい。

感想

こういうちょっとしたやつって、どこかにあると思うんだが、どういうワードでググれば良いか分からなかった。
1分ぐらい調べて、書いたほうがはえーよと思ってブラウザをそっと閉じた。

…のだけど、そのうち最初の「やりたいこと」に書いた処理自体がなくなったので、そもそも書く必要はなかった(なので、ここで労働時間を供養)。

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
5