はじめに
現場でXcode 15が導入されました。1
なんということでしょう!!
SE-0380 if and switch expressionsが使えるではありませんか ![]()
さっそく使ってみた
以下のコードを書きました![]()

あれ?? ![]()
nilの型推論ができないのでエラーになっているっぽいです。
解決策 1
userInfoの型を明記する。
func doStuff(_ message: String) -> [String: Any]? {
let userInfo: [String: Any]? =
if message.isEmpty {
nil
} else {
[NSLocalizedDescriptionKey: message]
}
return userInfo
}
解決策 2
nilの型を明記する。
func doStuff(_ message: String) -> [String: Any]? {
let userInfo =
if message.isEmpty {
nil as [String: Any]?
} else {
[NSLocalizedDescriptionKey: message]
}
return userInfo
}
解決策 3
userInfoを使うのをやめて、if文をreturnの引数にする。
func doStuff(_ message: String) -> [String: Any]? {
return if message.isEmpty {
nil
} else {
[NSLocalizedDescriptionKey: message]
}
}
Note: returnの後ろに改行を入れると警告が出ます。

解決策 4
returnすら要らない。
func doStuff(_ message: String) -> [String: Any]? {
if message.isEmpty {
nil
} else {
[NSLocalizedDescriptionKey: message]
}
}
お好みの方法でお楽しみください
![]()
いいわけ
三項演算子を使って、↓こうじゃないの?というご意見もあるかと存じますが、
SE-0380を楽しんでみる趣旨から外れるので除外しております。
func doStuff(_ message: String) -> [String: Any]? {
message.isEmpty ? nil : [NSLocalizedDescriptionKey: message]
}
-
執筆時、既にXcode 16がリリースされておりますが。 ↩