<div dir="ltr">Hello,<div><br></div><div>I&#39;d like to understand why I&#39;m unable to use the nil coalescing operator with functions.</div><div><br></div><div>For example, I&#39;d like to write a function that takes an optional function as a parameter and that uses the nil coalescing operator to select a default function if the function&#39;s  function parameter is nil, e.g:</div><div><br></div><div><div>    func test(x: ((String) -&gt; String)? = nil) {</div><div><br></div><div>      let qq = { (p:String) -&gt; String in return &quot;...&quot; }</div><div><br></div><div>      let fn: String -&gt; String = x ?? qq</div><div><br></div><div>      fn(&quot;test&quot;)</div><div>    }</div></div><div><br></div><div>When I do this the compiler complains that:</div><div><br></div><div>  Binary operator &#39;??&#39; cannot be applied to operands of type &#39;((String) -&gt; String)?&#39; and &#39;(String) -&gt; String:</div><div><br></div><div>In the Swift 2.2 Language Guide (<a href="https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/BasicOperators.html">https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/BasicOperators.html</a>) it states:</div><div><br></div><div><p class="" style="background-color:transparent;border:0px;font-size:1.4em;margin:0px 0px 15px;outline:0px;padding:0px;vertical-align:baseline;color:rgb(65,65,65);line-height:20.299999237060547px;font-family:Helvetica,Arial,sans-serif">The nil coalescing operator is shorthand for the code below:</p><div class="" style="background-color:transparent;border:0px;font-size:1.4em;margin:0px 0px 0px 21px;outline:0px;padding:0px;vertical-align:baseline"><div class="" style="background-color:transparent;border-width:0px 0px 0px 5px;border-left-style:solid;border-left-color:rgb(205,233,244);margin:10px 0px 21px 13px;outline:0px;padding:4px 0px 2px 10px;vertical-align:baseline;width:616.578125px"><ol class="" style="background-color:transparent;border:0px;margin:0px;outline:0px;padding:0px;vertical-align:baseline;line-height:1.6em;list-style:none"><li style="background-color:transparent;border-width:0px 0px 0px 18px;border-left-style:solid;border-left-color:transparent;margin:0px;outline:0px;padding:0px 10px 0px 0px;vertical-align:baseline;white-space:pre-wrap;color:rgb(255,255,255);list-style-type:none"><code class="" style="background-color:transparent;border:0px;font-size:0.85em;margin:0px;outline:0px;padding:0px;vertical-align:baseline;color:rgb(0,0,0);font-family:Menlo,monospace;word-wrap:break-word"><span class="" style="background-color:transparent;border:0px;margin:0px;outline:0px;padding:0px;vertical-align:baseline;color:rgb(63,110,116)">a</span> != <span class="" style="background-color:transparent;border:0px;margin:0px;outline:0px;padding:0px;vertical-align:baseline;color:rgb(170,51,145)">nil</span> ? <span class="" style="background-color:transparent;border:0px;margin:0px;outline:0px;padding:0px;vertical-align:baseline;color:rgb(63,110,116)">a</span>! : <span class="" style="background-color:transparent;border:0px;margin:0px;outline:0px;padding:0px;vertical-align:baseline;color:rgb(63,110,116)">b</span></code></li></ol></div></div></div><div>If I use the longhand option then the complier&#39;s fine:</div><div><br></div><div>    func test(x: ((String) -&gt; String)? = nil)  {<br></div><div>  </div><div>        let qq = { (p:String) -&gt; String in return &quot;...&quot; }</div><div>  </div><div>        let fn = x != nil ? x! : qq</div><div><br></div><div>        fn(&quot;test&quot;)</div><div>    }</div><div><br></div><div>So why doesn&#39;t the nil coalescing operator work for function vars? </div><div><br></div><div>thanks!</div></div>