> On May 31, 2017, at 4:16 PM, Steven Brunwasser <sbrunwas...@gmail.com> wrote:
> 
> Basically, my library contains a bunch of collection-like protocols, which 
> can be combined in different ways and can be compatible with each other in 
> certain combinations when the proper types align. Naturally, they all have an 
> Element associatedtype, but I need to allow for the possibility where two of 
> these collection protocols are implemented in the same structure that 
> requires different type definitions for each protocols' Element.

Oh, I understand now. This is intentionally not supported — associated types 
with the same name from different protocols must all be implemented by the same 
typealias in the conforming type.

Slava

> 
> I’ve been trying to make some other protocols to simplify some definitions, 
> but specifying a parent protocol’s associated type within a child protocol 
> doesn’t seem to work.
> 
>       protocol Buzz: Bar {
>               typealias Container = A
>       }
> 
>       struct BuzzImpl: Buzz {} // error: type ‘BuzzImpl' does not conform to 
> protocol ‘Buzz'
> 
> On May 31, 2017 at 4:02:43 PM, Slava Pestov (spes...@apple.com 
> <mailto:spes...@apple.com>) wrote:
> 
>> Can you give an example of a problematic name collision? Does fully 
>> qualifying names not help?
>> 
>> Slava
>> 
>>> On May 31, 2017, at 4:01 PM, Steven Brunwasser via swift-users 
>>> <swift-users@swift.org <mailto:swift-users@swift.org>> wrote:
>>> 
>>> Hi,
>>> 
>>> I have a library which uses a few generic protocols with identically named 
>>> associated types that may not always be specified identically by 
>>> implementors.
>>> 
>>> protocol Foo {
>>> associatedtype Container
>>> associatedtype Element
>>> }
>>> 
>>> protocol Bar {
>>> associatedtype Container
>>> associatedtype Element
>>> }
>>> 
>>> struct Baz: Foo, Bar {
>>> // Implement using two different Container/Element types.
>>> }
>>> 
>>> Is there a consensus on some naming convention for associatedtypes to 
>>> mitigate name collisions?
>>> Would it be acceptable to add namespace prefixes to these types?
>>> 
>>> protocol Foo {
>>> associatedtype FooContainer
>>> associatedtype FooElement
>>> }
>>> 
>>> I’m using the dictionary and thesaurus to find some alternative names I 
>>> could use, but the ones already used are so the most sensical semantically.
>>> 
>>> Do you have any suggestions?
>>> 
>>> Thanks, 
>>> - Steve Brunwasser
>>> _______________________________________________
>>> swift-users mailing list
>>> swift-users@swift.org <mailto:swift-users@swift.org>
>>> https://lists.swift.org/mailman/listinfo/swift-users 
>>> <https://lists.swift.org/mailman/listinfo/swift-users>
_______________________________________________
swift-users mailing list
swift-users@swift.org
https://lists.swift.org/mailman/listinfo/swift-users

Reply via email to