post Image
SwiftでもKotlinのif式を使いたい

Kotlinのif式が便利なので、Swiftでも使いたいなーと思って試してみました。

Kotlinのif式

  • if式が値を返すので、そのまま変数に代入できて便利です。
val boolean = true
val string: String = if (boolean) {
    val str1 = "Hello"
    val str2 = "World"
    str1 + " " + str2
} else {
    "NO"
}
print(string) // Hello World

Swiftで困ったこと

単純に値を代入するだけであれば、三項演算子を使えばOKです。

let string: String = boolean ? "YES" : "NO"

しかし、分岐した後に複数行の処理を入れられません。

// こんな記述はできない
let string: String = boolean ? {
    let str1 = "Hello"
    let str2 = "World"
    return str1 + " " + str2
} : "NO"

クロージャが使えそう

Swiftのリファレンスをみてみると、Setting a Default Property Value with a Closure or Functionの項にクロージャを使ってプロパティに初期値をセットする方法が書かれています。クロージャは値を返せるので利用できそうです。

//  Setting a Default Property Value with a Closure or Functionの項より引用
let someProperty: SomeType = {
    return someValue
}()

クロージャ + 三項演算子で実装

クロージャを返すようにするだけで簡単に実装できました。

let string: String = boolean ? {
    let str1 = "Hello"
    let str2 = "World"
    return str1 + "" + str2
}() : "NO"

初期値を与えて$0で使うこともできます。

let string: String = boolean ? {
    let str2 = "World"
    return $0 + "" + str2
}("Hello") : "NO"

クロージャ + switch文で実装

三項演算子では2つの分岐しか作れないので、3つ以上に分岐するためswitch文を使ってみます。
2重のクロージャになってしまうし、内部で値を保持するためにvarも使っていて実用性がありません。。。
コメントでご指摘いただき修正しました!実用できそうです :bulb:

let num = 0
let string: String = {
    switch num {
    case 0:
        let str1 = "Hello"
        let str2 = "World"
        return str1 + "" + str2
    case 1:
        return ""
    default:
        return ""
    }
}()

まとめ

Kotlinのif式っぽいものをSwiftで書いてみました。
クロージャを使うので少しだけネストが増えますが、便利に使えそうです。

参考


『 Swift 』Article List
Category List

Eye Catch Image
Read More

Androidに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

AWSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Bitcoinに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

CentOSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

dockerに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

GitHubに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Goに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Javaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

JavaScriptに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Laravelに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Pythonに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Rubyに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Scalaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Swiftに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Unityに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Vue.jsに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Wordpressに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

機械学習に関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。