1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Swift】Structでもmutatingじゃないメソッドなら再帰できる

Posted at

気付き、ですね。

思い込み

この辺を見て、Swiftで再帰する=クラスを使わなければいけない(Enumは再帰Enumがある?)と短絡的に思っていました。

気付き

しかし再帰のときに問題なのは、mutatingなメソッドであって、immutableなメソッドなら再帰できることに気付きました。

つまり

struct Some {
    func some(input: String) {
        let word = input
        if word != "これで終わりや" {
            print(word)
            some(input: "これで終わりや")
        } else { print("returnするで"); return }
            print("終わるで")
    }
}

Some().some(input: "はじめや")

PlayGroundで実行すると、

はじめや
returnするで
終わるで

が出力するので、一度だけ再帰的にメソッドが呼ばれて、returnして、その後呼び出し元のメソッドに処理が返ったのがわかります。
ただ色々書いてみると感じますが、immutableな再帰関数ってかなり使いづらいので、再帰したいなら素直にClass使うのが推奨ですかね〜

1
3
0

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
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?