まず、プロトコル関数にデフォルトの引数値を提供することでコーディングを簡素化する方法を探しました。私はここで解決策を取り、それがもたらす可能性のある致命的なサブシーケンスを見つけました:
protocol Foo {
func foo(_ a: Int)
}
extension Foo {
func foo(_ a: Int = 4) {
foo(a)
}
}
struct FooImpl: Foo {
// empty implementation
}
FooImpl().foo() // will go recursively forever and finally reach the stack limit
また、このコードはIBM Swift Sandboxでのコンパイルに失敗することがわかったので、xcode コンパイラーが原因である可能性があります。