気付き、ですね。
思い込み
この辺を見て、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使うのが推奨ですかね〜