やりたいこと
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分ぐらい調べて、書いたほうがはえーよと思ってブラウザをそっと閉じた。
…のだけど、そのうち最初の「やりたいこと」に書いた処理自体がなくなったので、そもそも書く必要はなかった(なので、ここで労働時間を供養)。