<div dir="ltr">-1 to default parameters in protocols.<div><br></div><div>Default parameters fall into a bad category of function features.</div><div>Since I&#39;m bad at explaining things, I&#39;ll give an example.</div><div><br></div><div>protocol A {</div><div>    func call(block: @autoclosure () -&gt; ())</div><div>}</div><div>protocol B {</div><div>    func call(block: () -&gt; ())</div><div>}</div><div><br></div><div>Now it&#39;s impossible to conform to both of these protocols.</div><div><br></div><div>@noescape is good, because we can conform to both protocols with a @noescape function.</div><div>`throws` is good, because we can conform to both protocols with a non-throwing function.</div><div><br></div><div>On the other hand, consider a case with defaulted parameters:</div><div><br></div><div>protocol A {</div><div>    func foo(x: Int = 1)</div><div>}</div><div>protocol B {</div><div>    func foo(x: Int = 2)</div><div>}</div><div><br></div><div>It&#39;s impossible to conform to both protocols at once.</div><div>Therefore, default parameters is together with @autoclosure and on the opposite side of @noescape and `throws`. That is, on &quot;ambiguous&quot; side.</div><div>I would prefer to have as few such features as possible.</div><div><br></div><div>- Anton</div></div>