<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">Using function availability has proven fragile in the past too. A function may be present but private on older system, and have a slightly different behavior or crash, and so should not be used.<div class=""><br class=""></div><div class=""><div class=""><br class=""><div><blockquote type="cite" class=""><div class="">Le 2 févr. 2016 à 11:03, James Campbell via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a>&gt; a écrit :</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class="">Coming from a web background (before my iOS career) to me #avaliable has huge problem. It encourages fragility.<div class=""><br class=""></div><div class="">In my eyes we should encourage two types of detection: Features to make code more adaptable to different environments and language version detection: so we can understand the actual code.</div><div class=""><br class=""></div><div class="">See this example below:</div><div class=""><br class=""></div><div class="">func magic(object: Object)</div><div class="">{</div><div class="">&nbsp; if(#avaliable(9.0, 10))</div><div class="">&nbsp;{</div><div class="">&nbsp;&nbsp;object.foo()</div><div class="">&nbsp;}</div><div class="">}</div><div class=""><br class=""></div><div class="">Ideally for me I would love to check if the foo function exists like so:</div><div class=""><br class=""></div><div class=""><div class="">func iOS9OnlyProtocolFunction(object: Object)</div><div class="">{</div><div class="">&nbsp; if(#avaliable(Object.foo))</div><div class="">&nbsp;{</div><div class="">&nbsp; &nbsp;&nbsp;object.foo()</div><div class="">&nbsp;}</div><div class="">else&nbsp;</div><div class="">{</div><div class="">&nbsp;&nbsp;object.baz()</div><div class="">&nbsp;}</div><div class="">}</div><div class=""><br class=""></div><div class="">I think this encourages feature detection which results in less fragile code. What I would love to do is also to extend this to extensions so we could encourage polyfills.</div><div class=""><br class=""></div><div class="">extend object where not_avaliable(Object.foo)&nbsp;</div><div class="">{</div><div class="">&nbsp; func foo()&nbsp;</div><div class="">&nbsp;{</div><div class="">&nbsp; &nbsp;//Polyfill for platforms which don't support the Object.foo method</div><div class="">&nbsp;}</div><div class="">}</div><div class=""><br class=""></div><div class="">Not sure about compiler details but being able to polyfill the function results in much cleaner code for me. I love this approach from the web, so I created my own Objective-C Library to do this:</div><div class=""><br class=""></div><div class=""><a href="https://github.com/jcampbell05/Polly" class="">https://github.com/jcampbell05/Polly</a><br class=""></div><div class=""><div class="gmail_signature"><div dir="ltr" class=""><div class=""><div dir="ltr" class=""><p class=""><b class=""><font color="#cc0000" class="">___________________________________</font></b></p><p class=""><b class="">James⎥Lead Engineer</b></p><p class=""><b class=""><font color="#cc0000" class=""><a href="mailto:james@supmenow.com" target="_blank" class="">james@supmenow.com</a>⎥<a href="http://supmenow.com/" target="_blank" class="">supmenow.com</a></font></b></p><p class=""><b class=""><font size="2" class="">Sup</font></b></p><p class=""><b class=""><font size="2" class="">Runway East
</font></b></p><p class=""><b class=""><font size="2" class="">10 Finsbury Square</font></b></p><p class=""><b class=""><font size="2" class="">London</font></b></p><p class=""><b class=""><font size="2" class="">
EC2A 1AF&nbsp;</font></b></p></div></div></div></div></div>
</div></div>
_______________________________________________<br class="">swift-evolution mailing list<br class=""><a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a><br class="">https://lists.swift.org/mailman/listinfo/swift-evolution<br class=""></div></blockquote></div><br class=""></div></div></body></html>