But what would that mean? If I reference `ProtocolName.InnerType`, that doesn’t always have meaning. In fact, if you have two different extensions where AssociatedType equals something else, there’s a type ambiguity from other code. I suspect it would only work if that InnerType was mandated to be `private`.
> On Oct 17, 2016, at 12:44 PM, Adrian Zubarev via swift-evolution > <[email protected]> wrote: > > That option should not be disallowed. Here is a simple example you might want > to build at some point: > > protocol ProtocolName { > > associatedtype AssociatedType > } > > extension ProtocolName where AssociatedType == Int { > > struct InnerType {} > } > > > > -- > Adrian Zubarev > Sent with Airmail > > Am 17. Oktober 2016 um 20:30:58, Karl via swift-evolution > ([email protected] <mailto:[email protected]>) schrieb: > >> Is your vision that each conforming type would have to provide its own >> nested type as specified by the protocol? >> >> Or could the protocol itself define a nested type and anything could use it? >> >> protocol FloatingPoint: … { >> enum RoundingRule { >> // Do I put an implementation here? >> } >> } >> >> No, types which are defined inside the protocol are implemented there. >> Providing your own types to satisfy a conformance is what associated types >> are for. >> >> If you wanted something like that, you could do it with a nested protocol + >> associated type: >> >> protocol FloatingPoint { >> >> protocol _RoundingRule { func round(_ : Super) -> Super } >> associatedType RoundingRule : _RoundingRule >> } >> >> struct Float : FloatingPoint { >> >> enum RoundingRule : _RoundingRule { >> func round(_ val: Float) -> Float { >> /* switch self, perform rounding… */ >> } >> } >> } >> >> That brings up an interesting point, though - we would need a way to refer >> to the outer protocol (I used “Super” here). >> > > > _______________________________________________ > swift-evolution mailing list > [email protected] <mailto:[email protected]> > https://lists.swift.org/mailman/listinfo/swift-evolution > <https://lists.swift.org/mailman/listinfo/swift-evolution>
_______________________________________________ swift-evolution mailing list [email protected] https://lists.swift.org/mailman/listinfo/swift-evolution
