<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=""><div class="">It sounds like what you want is an GADT-like adaptor gadget to try to bridge between these protocols across these specific types. &nbsp;With general disjuncts you’re subject to the open world assumption - that anybody that should conform to a (visible) protocol, can conform to that protocol - thus rendering any attempts to inspect the kind of thing you’ve got in the disjunct useless.</div><div class=""><br class=""></div><div class="">~Robert Widmann</div><div class=""><br class=""></div><div class=""><br class=""></div><div><blockquote type="cite" class=""><div class="">On Feb 2, 2017, at 5:02 PM, Rex Fenley 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=""><div dir="ltr" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class="">But then any time as user of the pipeline I'm writing&nbsp;would like a new type of collection they will be forced to inherit this new protocol vs one they're already familiar with and which the collection may already conform too.</div><div class="gmail_extra" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;"><br class=""><div class="gmail_quote">On Thu, Feb 2, 2017 at 1:53 PM, Matthew Johnson<span class="Apple-converted-space">&nbsp;</span><span dir="ltr" class="">&lt;<a href="mailto:matthew@anandabits.com" target="_blank" class="">matthew@anandabits.com</a>&gt;</span><span class="Apple-converted-space">&nbsp;</span>wrote:<br class=""><blockquote class="gmail_quote" style="margin: 0px 0px 0px 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex;"><div style="word-wrap: break-word;" class=""><br class=""><div class=""><span class=""><blockquote type="cite" class=""><div class="">On Feb 2, 2017, at 3:46 PM, Rex Fenley &lt;<a href="mailto:rex@remind101.com" target="_blank" class="">rex@remind101.com</a>&gt; wrote:</div><br class="m_-7576891152844605977Apple-interchange-newline"><div class=""><div dir="ltr" class="">My use case is RLMArray and it can't implement&nbsp;<span style="font-size: 12.8px;" class="">RangeReplaceableColl<wbr class="">ection</span>&nbsp;though because `init` is unavailable, additionally, there's a lot of parts to the protocol that would take some time to implement correctly if I could. They offer a Swift type List that wraps RLMArray and does a bunch of stuff to implement&nbsp;<span style="font-size: 12.8px;" class="">RangeReplaceableColl<wbr class="">ection,</span>&nbsp;but they discourage using their Swift library in mixed Obj-C/Swift projects and certain model objects simply couldn't use the List type anyway because they're also used in Obj-C and List is not @objc compliant.<br class=""><br class="">So this leaves me in situations where when I need to use Array or RLMArray I have to duplicate my code, not just in one place, but all the way down a pipeline in order to have my generics work with either&nbsp;<span style="font-size: 12.8px;" class="">RangeReplaceableCollect<wbr class="">ion or&nbsp;</span>RLMArray.<br class=""><br class="">If I could abstract the commonalities required by my application, I could just have a RLMArrayProtocol that has RLMArray's exposed function signatures and a new protocol Appendable =&nbsp;<span style="font-size: 12.8px;" class="">RangeReplaceableCollection |&nbsp;</span>RLMArrayProtocol and this will type check all the way through the pipeline.<div class=""><br class=""></div><div class="">tl;dr - if a function signature required by a protocol is marked unavailable on a class, then disjunction is necessary in order to bridge the two (or more) types without duplicating code.</div></div></div></blockquote><div class=""><br class=""></div></span><div class="">You should be able to solve this problem today by creating a custom protocol that you use as a constraint in your generic code and providing conformances for both Array and RLMArray.</div><div class=""><div class="h5"><br class=""><blockquote type="cite" class=""><div class=""><div class="gmail_extra"><br class=""><div class="gmail_quote">On Thu, Feb 2, 2017 at 1:35 PM, Matthew Johnson<span class="Apple-converted-space">&nbsp;</span><span dir="ltr" class="">&lt;<a href="mailto:matthew@anandabits.com" target="_blank" class="">matthew@anandabits.com</a>&gt;</span>wrote:<br class=""><blockquote class="gmail_quote" style="margin: 0px 0px 0px 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex;"><div style="word-wrap: break-word;" class=""><div class=""><span class=""><blockquote type="cite" class=""><div class=""><br class="">On Feb 2, 2017, at 3:26 PM, Rex Fenley via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" target="_blank" class="">swift-evolution@swift.org</a>&gt; wrote:</div><br class="m_-7576891152844605977m_4684597058227267120Apple-interchange-newline"><div class=""><div dir="ltr" class="">Hello, I believe there was some discussion about this quite awhile ago. I was wondering if there's any interest in including a protocol 'or' type that would be the intersection of two protocols. This could be really useful in situations where a framework that the user has no control over implements a portion of some often used protocol. Such as specialized collections from an Database framework that don't implement RangeReplaceableCollection but have a set of methods that are equivalent. The user can then implement a protocol that is the intersection of those set of methods and not duplicate code.</div></div></blockquote><div class=""><br class=""></div></span><div class="">If the specialized collection in the database framework already provides functionality equivalent to `RangeReplaceableCollection` what you really want to do is just provide the conformance you’re looking for in an extension:</div><div class=""><br class=""></div><div class="">extension SpecializedDatabaseCollection: RangeReplaceableCollection {</div><div class="">&nbsp; &nbsp;// if necessary, provide forwarding wrappers where the member names don’t match up.</div><div class="">}</div><div class=""><br class=""></div><div class="">But in a case like this the framework itself really should provide this conformance out of the box.&nbsp; If they didn’t, maybe there is a good reason so you would want to find out why it wasn’t provided.</div><div class=""><br class=""></div><div class="">Is there something you’re hoping to do that you can’t solve by simply extending the framework types?</div><span class=""><br class=""><blockquote type="cite" class=""><div class=""><div dir="ltr" class=""><div class=""><br class=""></div><div class="">Simplified example:</div><div class=""><br class=""></div><div class="">protocol Animal {</div><div class="">&nbsp; &nbsp;<span class="Apple-converted-space">&nbsp;</span>var hasEars: Bool { get }</div><div class="">&nbsp; &nbsp;<span class="Apple-converted-space">&nbsp;</span>func grow()</div><div class="">}</div><div class=""><br class=""></div><div class=""><div class="">protocol Plant {</div><div class="">&nbsp; &nbsp;<span class="Apple-converted-space">&nbsp;</span>var isGreen: Bool { get }</div><div class="">&nbsp; &nbsp;<span class="Apple-converted-space">&nbsp;</span>func grow()</div><div class="">}</div><div class=""><br class=""></div><div class="">protocol LivingThing = Plant | Animal // or a different syntax</div><div class=""><br class=""></div><div class="">LivingThing's is as follows</div><div class="">{</div><div class="">&nbsp; &nbsp;<span class="Apple-converted-space">&nbsp;</span>func grow()</div><div class="">}</div></div></div></div></blockquote></span><blockquote type="cite" class=""><div class=""><span class=""><div dir="ltr" class=""><div class=""><div class=""><br class=""></div>--<span class="Apple-converted-space">&nbsp;</span><br class=""><div class="m_-7576891152844605977m_4684597058227267120gmail_signature"><div dir="ltr" class=""><span class=""><div style="line-height: 1.15; margin-top: 0pt; margin-bottom: 0pt;" class=""><span style="font-size: 16px; font-family: arial; background-color: transparent; font-style: italic; vertical-align: baseline; white-space: pre-wrap;" class="">Rex Fenley</span><span style="font-size: 16px; font-family: arial; background-color: transparent; vertical-align: baseline; white-space: pre-wrap;" class=""> &nbsp;</span><span style="font-size: 11px; font-family: arial; color: rgb(153, 153, 153); background-color: transparent; vertical-align: baseline; white-space: pre-wrap;" class="">|</span><span style="line-height: 1.15; font-family: arial; color: rgb(153, 153, 153); background-color: transparent; vertical-align: baseline; white-space: pre-wrap;" class=""> &nbsp;</span><span style="font-size: 11px; font-family: arial; color: rgb(153, 153, 153); background-color: transparent; vertical-align: baseline; white-space: pre-wrap;" class="">IOS DEVELOPER</span><br class=""></div></span><span class=""><br class=""><div style="line-height: 1.15; margin-top: 0pt; margin-bottom: 0pt;" class=""><span style="font-size: 11px; font-family: arial; color: rgb(153, 153, 153); vertical-align: baseline; white-space: pre-wrap; background-color: transparent;" class=""><img src="https://lh5.googleusercontent.com/xMgzw3JkFL3DLkdwyq0WxJzKs_XP57gVVCaBMvgi1FKCjSeue0xdx3JZeCWBlxN4KRHhHOfdvJbc1N-AjTwXcKIq4cjJg9H7iaFpQ8WbO4N3c9Y5dzi19cPOs_owPquuqw" width="250px;" height="53px;" style="border: none;" class=""></span></div><div style="line-height: 1.15; margin-top: 0pt; margin-bottom: 0pt;" class=""><a href="https://www.remind.com/" target="_blank" style="text-decoration: none;" class=""><span style="font-size: 11px; font-family: arial; color: rgb(17, 85, 204); font-weight: bold; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap; background-color: transparent;" class="">Remind.com</span></a><span style="font-family: arial; vertical-align: baseline; white-space: pre-wrap; background-color: transparent;" class=""> </span><span style="font-size: 11px; font-family: arial; vertical-align: baseline; white-space: pre-wrap; background-color: transparent;" class="">| &nbsp;</span><a href="http://blog.remind.com/" target="_blank" style="text-decoration: none;" class=""><span style="font-size: 11px; font-family: arial; color: rgb(17, 85, 204); text-decoration: underline; vertical-align: baseline; white-space: pre-wrap; background-color: transparent;" class="">BLOG</span></a><span style="font-size: 11px; font-family: arial; vertical-align: baseline; white-space: pre-wrap; background-color: transparent;" class=""> &nbsp;| &nbsp;</span><a href="https://twitter.com/remindhq" target="_blank" style="text-decoration: none;" class=""><span style="font-size: 11px; font-family: arial; color: rgb(17, 85, 204); text-decoration: underline; vertical-align: baseline; white-space: pre-wrap; background-color: transparent;" class="">FOLLOW US</span></a><span style="font-size: 11px; font-family: arial; vertical-align: baseline; white-space: pre-wrap; background-color: transparent;" class=""> &nbsp;| </span><span style="font-family: arial; vertical-align: baseline; white-space: pre-wrap; background-color: transparent;" class="">&nbsp;</span><span style="text-decoration: underline; font-size: 11px; font-family: arial; color: rgb(17, 85, 204); vertical-align: baseline; white-space: pre-wrap; background-color: transparent;" class=""><a href="https://www.facebook.com/remindhq" target="_blank" style="text-decoration: none;" class="">LIKE US</a></span></div></span></div></div></div></div></span><span class="">______________________________<wbr class="">_________________<br class="">swift-evolution mailing list<br class=""><a href="mailto:swift-evolution@swift.org" target="_blank" class="">swift-evolution@swift.org</a><br class=""><a href="https://lists.swift.org/mailman/listinfo/swift-evolution" target="_blank" class="">https://lists.swift.org/mailma<wbr class="">n/listinfo/swift-evolution</a><br class=""></span></div></blockquote></div><br class=""></div></blockquote></div><br class=""><br clear="all" class=""><div class=""><br class=""></div>--<span class="Apple-converted-space">&nbsp;</span><br class=""><div class="m_-7576891152844605977gmail_signature" data-smartmail="gmail_signature"><div dir="ltr" class=""><span class=""><div style="line-height: 1.15; margin-top: 0pt; margin-bottom: 0pt;" class=""><span style="font-size: 16px; font-family: Arial; background-color: transparent; font-style: italic; vertical-align: baseline; white-space: pre-wrap;" class="">Rex Fenley</span><span style="font-size: 16px; font-family: Arial; background-color: transparent; vertical-align: baseline; white-space: pre-wrap;" class=""> &nbsp;</span><span style="font-size: 11px; font-family: Arial; color: rgb(153, 153, 153); background-color: transparent; vertical-align: baseline; white-space: pre-wrap;" class="">|</span><span style="line-height: 1.15; font-family: Arial; color: rgb(153, 153, 153); background-color: transparent; vertical-align: baseline; white-space: pre-wrap;" class=""> &nbsp;</span><span style="font-size: 11px; font-family: Arial; color: rgb(153, 153, 153); background-color: transparent; vertical-align: baseline; white-space: pre-wrap;" class="">IOS DEVELOPER</span><br class=""></div></span><span class=""><br class=""><div style="line-height: 1.15; margin-top: 0pt; margin-bottom: 0pt;" class=""><span style="font-size: 11px; font-family: Arial; color: rgb(153, 153, 153); vertical-align: baseline; white-space: pre-wrap; background-color: transparent;" class=""><img src="https://lh5.googleusercontent.com/xMgzw3JkFL3DLkdwyq0WxJzKs_XP57gVVCaBMvgi1FKCjSeue0xdx3JZeCWBlxN4KRHhHOfdvJbc1N-AjTwXcKIq4cjJg9H7iaFpQ8WbO4N3c9Y5dzi19cPOs_owPquuqw" width="250px;" height="53px;" style="border: none;" class=""></span></div><div style="line-height: 1.15; margin-top: 0pt; margin-bottom: 0pt;" class=""><a href="https://www.remind.com/" target="_blank" style="text-decoration: none;" class=""><span style="font-size: 11px; font-family: Arial; color: rgb(17, 85, 204); font-weight: bold; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap; background-color: transparent;" class="">Remind.com</span></a><span style="font-family: Arial; vertical-align: baseline; white-space: pre-wrap; background-color: transparent;" class=""> </span><span style="font-size: 11px; font-family: Arial; vertical-align: baseline; white-space: pre-wrap; background-color: transparent;" class="">| &nbsp;</span><a href="http://blog.remind.com/" target="_blank" style="text-decoration: none;" class=""><span style="font-size: 11px; font-family: Arial; color: rgb(17, 85, 204); text-decoration: underline; vertical-align: baseline; white-space: pre-wrap; background-color: transparent;" class="">BLOG</span></a><span style="font-size: 11px; font-family: Arial; vertical-align: baseline; white-space: pre-wrap; background-color: transparent;" class=""> &nbsp;| &nbsp;</span><a href="https://twitter.com/remindhq" target="_blank" style="text-decoration: none;" class=""><span style="font-size: 11px; font-family: Arial; color: rgb(17, 85, 204); text-decoration: underline; vertical-align: baseline; white-space: pre-wrap; background-color: transparent;" class="">FOLLOW US</span></a><span style="font-size: 11px; font-family: Arial; vertical-align: baseline; white-space: pre-wrap; background-color: transparent;" class=""> &nbsp;| </span><span style="font-family: Arial; vertical-align: baseline; white-space: pre-wrap; background-color: transparent;" class="">&nbsp;</span><span style="text-decoration: underline; font-size: 11px; font-family: Arial; color: rgb(17, 85, 204); vertical-align: baseline; white-space: pre-wrap; background-color: transparent;" class=""><a href="https://www.facebook.com/remindhq" target="_blank" style="text-decoration: none;" class="">LIKE US</a></span></div></span></div></div></div></div></blockquote></div></div></div><br class=""></div></blockquote></div><br class=""><br clear="all" class=""><div class=""><br class=""></div>--<span class="Apple-converted-space">&nbsp;</span><br class=""><div class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr" class=""><span class=""><div style="line-height: 1.15; margin-top: 0pt; margin-bottom: 0pt;" class=""><span style="font-size: 16px; font-family: Arial; background-color: transparent; font-style: italic; vertical-align: baseline; white-space: pre-wrap;" class="">Rex Fenley</span><span style="font-size: 16px; font-family: Arial; background-color: transparent; vertical-align: baseline; white-space: pre-wrap;" class=""> &nbsp;</span><span style="font-size: 11px; font-family: Arial; color: rgb(153, 153, 153); background-color: transparent; vertical-align: baseline; white-space: pre-wrap;" class="">|</span><span style="line-height: 1.15; font-family: Arial; color: rgb(153, 153, 153); background-color: transparent; vertical-align: baseline; white-space: pre-wrap;" class=""> &nbsp;</span><span style="font-size: 11px; font-family: Arial; color: rgb(153, 153, 153); background-color: transparent; vertical-align: baseline; white-space: pre-wrap;" class="">IOS DEVELOPER</span><br class=""></div></span><span class=""><br class=""><div style="line-height: 1.15; margin-top: 0pt; margin-bottom: 0pt;" class=""><span style="font-size: 11px; font-family: Arial; color: rgb(153, 153, 153); vertical-align: baseline; white-space: pre-wrap; background-color: transparent;" class=""><img src="https://lh5.googleusercontent.com/xMgzw3JkFL3DLkdwyq0WxJzKs_XP57gVVCaBMvgi1FKCjSeue0xdx3JZeCWBlxN4KRHhHOfdvJbc1N-AjTwXcKIq4cjJg9H7iaFpQ8WbO4N3c9Y5dzi19cPOs_owPquuqw" width="250px;" height="53px;" style="border: none;" class=""></span></div><div style="line-height: 1.15; margin-top: 0pt; margin-bottom: 0pt;" class=""><a href="https://www.remind.com/" target="_blank" style="text-decoration: none;" class=""><span style="font-size: 11px; font-family: Arial; color: rgb(17, 85, 204); font-weight: bold; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap; background-color: transparent;" class="">Remind.com</span></a><span style="font-family: Arial; vertical-align: baseline; white-space: pre-wrap; background-color: transparent;" class=""> </span><span style="font-size: 11px; font-family: Arial; vertical-align: baseline; white-space: pre-wrap; background-color: transparent;" class="">| &nbsp;</span><a href="http://blog.remind.com/" target="_blank" style="text-decoration: none;" class=""><span style="font-size: 11px; font-family: Arial; color: rgb(17, 85, 204); text-decoration: underline; vertical-align: baseline; white-space: pre-wrap; background-color: transparent;" class="">BLOG</span></a><span style="font-size: 11px; font-family: Arial; vertical-align: baseline; white-space: pre-wrap; background-color: transparent;" class=""> &nbsp;| &nbsp;</span><a href="https://twitter.com/remindhq" target="_blank" style="text-decoration: none;" class=""><span style="font-size: 11px; font-family: Arial; color: rgb(17, 85, 204); text-decoration: underline; vertical-align: baseline; white-space: pre-wrap; background-color: transparent;" class="">FOLLOW US</span></a><span style="font-size: 11px; font-family: Arial; vertical-align: baseline; white-space: pre-wrap; background-color: transparent;" class=""> &nbsp;| </span><span style="font-family: Arial; vertical-align: baseline; white-space: pre-wrap; background-color: transparent;" class="">&nbsp;</span><span style="text-decoration: underline; font-size: 11px; font-family: Arial; color: rgb(17, 85, 204); vertical-align: baseline; white-space: pre-wrap; background-color: transparent;" class=""><a href="https://www.facebook.com/remindhq" target="_blank" style="text-decoration: none;" class="">LIKE US</a></span></div></span></div></div></div><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">_______________________________________________</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">swift-evolution mailing list</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><a href="mailto:swift-evolution@swift.org" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;" class="">swift-evolution@swift.org</a><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><a href="https://lists.swift.org/mailman/listinfo/swift-evolution" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;" class="">https://lists.swift.org/mailman/listinfo/swift-evolution</a></div></blockquote></div><br class=""></body></html>