<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body><div>Alternatively you can write<br></div>
<div>&nbsp;</div>
<div>&nbsp; &nbsp; subviews.lazy.flatMap({ $0 as? NSButton }).find({ $0.state == NSOnState })<br></div>
<div>&nbsp;</div>
<div>-Kevin Ballard<br></div>
<div>&nbsp;</div>
<div>On Wed, Feb 17, 2016, at 07:12 AM, Maximilian Hünenberger via swift-evolution wrote:<br></div>
<blockquote type="cite"><div>&nbsp;</div>
<div>I think<br></div>
<div>&nbsp;</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; subviews.find{ ($0 as? NSButton)?.state == NSOnState } as? NSButton<br></div>
<div>&nbsp;</div>
<div>is sufficient and makes it clear that you are searching for a specific type. Even though you have to cast twice I don't think an additional method would be worth its use since it isn't used as often.<br></div>
<div>&nbsp;</div>
<div>- Maximilian<br></div>
<div><div>&nbsp;</div>
<div>Am 17.02.2016 um 10:32 schrieb Marco Masser via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a>&gt;:<br></div>
</div>
<blockquote type="cite"><div><div>I just saw this PR and have a quick comment about the implementation: It could be shortened by a few lines using a&nbsp;<span class="colour" style="color:rgb(187, 44, 162)"><span class="font" style="font-family:Menlo"><span class="size" style="font-size:11px">where</span></span></span>&nbsp;clause like this:<br></div>
<div>&nbsp;</div>
<div><div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:11px;line-height:normal;font-family:Menlo;"><span class="colour" style="color:rgb(187, 44, 162)">func</span><span style=""> find(</span><span class="colour" style="color:rgb(187, 44, 162)">@noescape</span><span style=""> predicate: </span><span class="colour" style="color:rgb(79, 129, 135)">Self</span><span style="">.</span><span class="colour" style="color:rgb(112, 61, 170)">Generator</span><span style="">.</span><span class="colour" style="color:rgb(112, 61, 170)">Element</span><span style=""></span><span class="colour" style="color:rgb(187, 44, 162)">throws</span><span style=""> -&gt; </span><span class="colour" style="color:rgb(112, 61, 170)">Bool</span><span style="">) </span><span class="colour" style="color:rgb(187, 44, 162)">rethrows</span><span style=""> -&gt; </span><span class="colour" style="color:rgb(79, 129, 135)">Self</span><span style="">.</span><span class="colour" style="color:rgb(112, 61, 170)">Generator</span><span style="">.</span><span class="colour" style="color:rgb(112, 61, 170)">Element</span><span style="">? {</span><br></div>
<div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:11px;line-height:normal;font-family:Menlo;"><span style=""></span><span class="colour" style="color:rgb(187, 44, 162)">for</span><span style=""> element </span><span class="colour" style="color:rgb(187, 44, 162)">in</span><span style=""></span><span class="colour" style="color:rgb(187, 44, 162)">self</span><span style=""></span><span class="colour" style="color:rgb(187, 44, 162)">where</span><span style=""></span><span class="colour" style="color:rgb(187, 44, 162)">try</span><span style=""> predicate(element) {</span><br></div>
<div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:11px;line-height:normal;font-family:Menlo;"><span style=""></span><span class="colour" style="color:rgb(187, 44, 162)">return</span><span style=""> element</span><br></div>
<div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:11px;line-height:normal;font-family:Menlo;"><span style="">&nbsp; &nbsp; }</span><br></div>
<div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(187, 44, 162);"><span class="colour" style="color:rgb(0, 0, 0)"></span><span style="">return</span><span class="colour" style="color:rgb(0, 0, 0)"></span><span style="">nil</span><br></div>
<div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:11px;line-height:normal;font-family:Menlo;"><span style="">}</span><br></div>
</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>Also, I’d like suggest adding a variant that works better with heterogenous sequences, but I’ll raise that when this proposal goes into review.<br></div>
<div>&nbsp;</div>
<div>FYI: That variant would look like this:<br></div>
<div><div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:11px;line-height:normal;font-family:Menlo;"><span class="colour" style="color:rgb(187, 44, 162)">func</span><span style=""> find&lt;T&gt;(</span><span class="colour" style="color:rgb(187, 44, 162)">_</span><span style="">: </span><span class="colour" style="color:rgb(79, 129, 135)">T</span><span style="">.Type, </span><span class="colour" style="color:rgb(187, 44, 162)">@noescape</span><span style=""> matching predicate: </span><span class="colour" style="color:rgb(79, 129, 135)">T</span><span style=""></span><span class="colour" style="color:rgb(187, 44, 162)">throws</span><span style=""> -&gt; </span><span class="colour" style="color:rgb(112, 61, 170)">Bool</span><span style="">) </span><span class="colour" style="color:rgb(187, 44, 162)">rethrows</span><span style=""> -&gt; </span><span class="colour" style="color:rgb(79, 129, 135)">T</span><span style="">?</span><br></div>
</div>
<div>&nbsp;</div>
<div>A question by me on the swift-users mailing list describes its intention, implementation, and usage:<br></div>
<div><a href="https://lists.swift.org/pipermail/swift-users/Week-of-Mon-20160118/000893.html">[swift-users] Which is the more idiomatic approach for pinning down        the type of a generic parameter?</a><br></div>
<div>&nbsp;</div>
<div>Cheers,<br></div>
<div>&nbsp;</div>
<div>Marco<br></div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div><blockquote type="cite"><div>On 2016-01-10, at 01:58, Kevin Ballard via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a>&gt; wrote:<br></div>
<div>&nbsp;</div>
<div><div><div>Proposal PR submitted as&nbsp;<a href="https://github.com/apple/swift-evolution/pull/94">https://github.com/apple/swift-evolution/pull/94</a><br></div>
<div>&nbsp;</div>
<div>-Kevin Ballard<br></div>
<div>&nbsp;</div>
<div>On Tue, Dec 29, 2015, at 06:38 PM, Kevin Ballard wrote:<br></div>
<blockquote type="cite"><div>I'm proposing a new extension method on SequenceType called find(). It's similar to CollectionType.indexOf() except it returns the element:<br></div>
<div>&nbsp;</div>
<div><div style="margin-top:0px;margin-bottom:0px;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(112, 61, 170);"><span class="colour" style="color:rgb(187, 44, 162)">extension</span><span style=""></span>SequenceType<span style=""> {</span><br></div>
<div style="margin-top:0px;margin-bottom:0px;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(144, 45, 208);"><span style=""></span>/// Returns the first element where `predicate` returns `true`, or `nil`<br></div>
<div style="margin-top:0px;margin-bottom:0px;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(144, 45, 208);"><span style=""></span>/// if such value is not found.<br></div>
<div style="margin-top:0px;margin-bottom:0px;font-size:11px;line-height:normal;font-family:Menlo;"><span class="colour" style="color:rgb(187, 44, 162)">public</span> <span class="colour" style="color:rgb(187, 44, 162)">func</span> find(<span class="colour" style="color:rgb(187, 44, 162)">@noescape</span> predicate: (<span class="colour" style="color:rgb(187, 44, 162)">Self</span>.Generator.Element) <span class="colour" style="color:rgb(187, 44, 162)">throws</span> -&gt; <span class="colour" style="color:rgb(112, 61, 170)">Bool</span>) <span class="colour" style="color:rgb(187, 44, 162)">rethrows</span> -&gt; <span class="colour" style="color:rgb(112, 61, 170)">Self</span>.<span class="colour" style="color:rgb(112, 61, 170)">Generator</span>.<span class="colour" style="color:rgb(112, 61, 170)">Element</span>? {<br></div>
<div style="margin-top:0px;margin-bottom:0px;font-size:11px;line-height:normal;font-family:Menlo;"><span class="colour" style="color:rgb(187, 44, 162)">for</span> elt <span class="colour" style="color:rgb(187, 44, 162)">in</span> <span class="colour" style="color:rgb(187, 44, 162)">self</span> {<br></div>
<div style="margin-top:0px;margin-bottom:0px;font-size:11px;line-height:normal;font-family:Menlo;"><span class="colour" style="color:rgb(187, 44, 162)">if</span> <span class="colour" style="color:rgb(187, 44, 162)">try</span> predicate(elt) {<br></div>
<div style="margin-top:0px;margin-bottom:0px;font-size:11px;line-height:normal;font-family:Menlo;"><span class="colour" style="color:rgb(187, 44, 162)">return</span> elt<br></div>
<div style="margin-top:0px;margin-bottom:0px;font-size:11px;line-height:normal;font-family:Menlo;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br></div>
<div style="margin-top:0px;margin-bottom:0px;font-size:11px;line-height:normal;font-family:Menlo;">&nbsp; &nbsp; &nbsp; &nbsp; }<br></div>
<div style="margin-top:0px;margin-bottom:0px;font-size:11px;line-height:normal;font-family:Menlo;"><span class="colour" style="color:rgb(187, 44, 162)">return</span> <span class="colour" style="color:rgb(187, 44, 162)">nil</span><br></div>
<div style="margin-top:0px;margin-bottom:0px;font-size:11px;line-height:normal;font-family:Menlo;">&nbsp; &nbsp; }<br></div>
<div style="margin-top:0px;margin-bottom:0px;font-size:11px;line-height:normal;font-family:Menlo;">}<br></div>
<div>&nbsp;</div>
<div>-Kevin Ballard<br></div>
</div>
<div>&nbsp;</div>
</blockquote><div>&nbsp;</div>
<div><img style="height:1px !important;width:1px !important;border-top-width:0px !important;border-right-width:0px !important;border-bottom-width:0px !important;border-left-width:0px !important;margin-top:0px !important;margin-bottom:0px !important;margin-right:0px !important;margin-left:0px !important;padding-top:0px !important;padding-bottom:0px !important;padding-right:0px !important;padding-left:0px !important;" border="0" height="1" width="1" alt="" src="https://www.fastmailusercontent.com/proxy/2b78dedf5366d99a8b7798caf70a25fba7b2d72b5a50221af4b4c60ab14d63f7/8647470737a3f2f25723030323431303e23647e23756e64676279646e2e65647f27766f2f60756e6f35707e6d3b49317d6e4c67626b40505d674e6f697051694445616369797e654d22324f49343749443a51743d68793a58325371573831356940777075594740354075386a65477b665464627a494a4e436c633d603377337862777c46524261305f6730576939784f6a42574a783c47475d4937455349357b675254626d44497a787f624c474b694c4d22324a5753735a7b46365159684663334953596b485b62617a546b4d676449716d22324d6c454567385a695137676b47756560544c6d22324d22364675607a4631574843784d666e473a553c48644940384d687141555d4156484d22324235684a67655f62584551345c61687a67734941703d23344/open"><br></div>
</div>
<div>_______________________________________________<br></div>
<div>swift-evolution mailing list<br></div>
<div><a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a><br></div>
<div><a href="https://lists.swift.org/mailman/listinfo/swift-evolution">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br></div>
</div>
</blockquote></div>
</div>
</blockquote><blockquote type="cite"><div><div><span>_______________________________________________</span><br></div>
<div><span>swift-evolution mailing list</span><br></div>
<div><span><a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a></span><br></div>
<div><span><a href="https://lists.swift.org/mailman/listinfo/swift-evolution">https://lists.swift.org/mailman/listinfo/swift-evolution</a></span><br></div>
</div>
</blockquote><div><u>_______________________________________________</u><br></div>
<div>swift-evolution mailing list<br></div>
<div><a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a><br></div>
<div><a href="https://lists.swift.org/mailman/listinfo/swift-evolution">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br></div>
</blockquote><div>&nbsp;</div>
</body>
</html>