<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=""><br class=""><div><blockquote type="cite" class=""><div class="">On Dec 16, 2015, at 6:17 AM, Marco Masser via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class=""><meta http-equiv="Content-Type" content="text/html charset=utf-8" class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class="">In Objective-C, I liked that fast enumeration over an NSArray that was nil and one that was empty could be handled with the exact same code:</div><div class=""><br class=""></div><div class=""><div class="" style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;"><span class="" style="color: rgb(112, 61, 170);">NSArray</span>&nbsp;*strings =&nbsp;<span class="" style="color: rgb(187, 44, 162);">nil</span>;</div><div class="" style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;"><span class="" style="color: rgb(187, 44, 162);">for</span>&nbsp;(<span class="" style="color: rgb(112, 61, 170);">NSString</span>&nbsp;*string&nbsp;<span class="" style="color: rgb(187, 44, 162);">in</span>&nbsp;strings) {</div><div class="" style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;">&nbsp; &nbsp; …</div><div class="" style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;">}</div></div></div></div></blockquote><div><br class=""></div>One thing we've discussed is adding attributes to import nil values of NSArray and such as empty arrays in Swift, rather than optionals of arrays. Would this solve your problem? Where are these optional arrays coming from in the first place, is it imported Cocoa APIs?</div><div><br class=""></div><div><blockquote type="cite" class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class="">Handling a sequence that is empty or one that is nil is often the same, at least in my experience. Granted, this points to an API that could be improved to return empty sequences instead of nil in many cases, but that is not always in one’s control. For example in AppKit,&nbsp;<span class="" style="font-family: Menlo; font-size: 11px;">NSView</span>’s&nbsp;<span class="" style="font-family: Menlo; font-size: 11px;">subviews</span>&nbsp;property is declared as&nbsp;<span class="" style="font-family: Menlo; font-size: 11px;">[</span><span class="" style="color: rgb(112, 61, 170); font-family: Menlo; font-size: 11px;">NSView</span><span class="" style="font-family: Menlo; font-size: 11px;">]</span>, while&nbsp;<span class="" style="font-family: Menlo; font-size: 11px;">NSWindow</span>’s&nbsp;<span class="" style="font-family: Menlo; font-size: 11px;">childWindows</span>&nbsp;property is&nbsp;<span class="" style="font-family: Menlo; font-size: 11px;">[</span><span class="" style="color: rgb(112, 61, 170); font-family: Menlo; font-size: 11px;">NSWindow</span><span class="" style="font-family: Menlo; font-size: 11px;">]?</span>, an optional Array.</div></div></blockquote><div><br class=""></div>Yeah, exactly. We want to be able to fix this.</div><div><br class=""><blockquote type="cite" class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class=""><div class="">Also, this is not a proposal to make the&nbsp;<span class="" style="color: rgb(112, 61, 170); font-family: Menlo; font-size: 11px;">Optional</span>&nbsp;type conform to&nbsp;<span class="" style="color: rgb(112, 61, 170); font-family: Menlo; font-size: 11px;">SequenceType</span>&nbsp;as was also discussed previously. If that were to be implemented, my proposal would be pointless, but you’d lose the distinction between iterating over an&nbsp;<span class="" style="color: rgb(112, 61, 170); font-family: Menlo; font-size: 11px;">Optional</span><span class="" style="font-family: Menlo; font-size: 11px;">&lt;</span><span class="" style="color: rgb(112, 61, 170); font-family: Menlo; font-size: 11px;">SequenceType</span><span class="" style="font-family: Menlo; font-size: 11px;">&gt;</span>&nbsp;and a&nbsp;<span class="" style="color: rgb(112, 61, 170); font-family: Menlo; font-size: 11px;">SequenceType</span>.&nbsp;Therefore, I’d prefer a specialized syntax to make a clear distinction between iterating over a&nbsp;<span class="" style="color: rgb(112, 61, 170); font-family: Menlo; font-size: 11px;">SequenceType</span>&nbsp;and an&nbsp;<span class="" style="color: rgb(112, 61, 170); font-family: Menlo; font-size: 11px;">Optional</span><span class="" style="font-family: Menlo; font-size: 11px;">&lt;</span><span class="" style="color: rgb(112, 61, 170); font-family: Menlo; font-size: 11px;">SequenceType</span><span class="" style="font-family: Menlo; font-size: 11px;">&gt;</span>.</div></div></div></blockquote><div><br class=""></div>Actually it depends on how the conformance was defined. If Optional&lt;T&gt; was a sequence iff T is a sequence, then yes it supersedes your proposal. Another way to imagine Optional&lt;T&gt; as a sequence is to make it a zero- or one-element sequence, depending on if it is None or Some, respectively. I'm not sure which, if either, is more useful.</div><div><br class=""><blockquote type="cite" class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class=""><br class=""></div><div class="">Cheers,</div><div class=""><br class=""></div><div class="">Marco</div>
<img src="https://u2002410.ct.sendgrid.net/wf/open?upn=NLTid1W7V2mxBEfr5Y3KfTntaxSmOQp5vjACZc9Eh1-2BndZ3lXDRveQBXue8X5U-2FE47FvQstU2UhSxE62-2FdxbbEvb3nydzaYYUzC8FviQp2d7-2B-2ByUM6kG0Ngzp0nC0avFNSQdJakZN-2B4iqR95uib30ePmgw6klhTiTv07uqMUHGkhr-2B8zk4wavEcvj3uSL1lKwBnGS5PeGRiU8TVIeaS3rp84XRai7tb7P6Ik8LXzGeo-3D" alt="" width="1" height="1" border="0" style="height:1px !important;width:1px !important;border-width:0 !important;margin-top:0 !important;margin-bottom:0 !important;margin-right:0 !important;margin-left:0 !important;padding-top:0 !important;padding-bottom:0 !important;padding-right:0 !important;padding-left:0 !important;" class="">
</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=""></blockquote></div><br class=""></body></html>