nilが入ってくるかもしれないStringの変数aとbを連結させたい場面があったのでメモ
やりたかったこと
let a:String? = "Hello"
let b:String? = nil
print(a + b) //エラー
こんな感じで(実際にはAPIとかから値を取得してくるときにnilが帰ってくるかもしれない状況)OptionalなString同士を連結させて、片方がnilな場合はそれを無視し、nilでない方だけ出力したかった。
上記の例だと、実行結果を Hello
としたい。
当然、a、bどっちもOptionalなのでアンラップしてくれとエラーが出る。 Value of optional type 'String?' must be unwrapped to a value of type 'String'
解決方法
let a:String? = "Hello"
let b:String? = nil
print("\(a ?? "")\(b ?? "")")
実行結果
Hello
こんな感じで、バックスラッシュ + カッコ で解決。
\(hoge)
は、文字列の中に変数を展開する方法。
hoge ?? "piyo"
は、 hoge
がnilだったときにデフォルト値( piyo
)を設定するよという書き方。
今回はnilのときは無視したかったので、デフォルトは空文字とした。
例えば、
let a:String? = "Hello"
let b:String? = nil
print("\(a ?? "")\(b ?? " world")")
このようにすると、b
のデフォルトがworld
になるので、実行結果は
Hello world
となる。