首先,我寻找一种通过为协议函数提供默认参数值来简化编码的方法。我在这里采取了解决方案,然后发现它可能带来的一些致命的子序列:
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 编译器可能是罪魁祸首。