Associated Types and Self
Another vector which can introduce associated types
into your codebase
is the usage of Self
:
protocol Example {
/// Indirect Associated Type
var builder: Self { get }
/// Indirect Associated Type
func makeSomething(with example: Self)
}
var myExamples: [Example] = []
As you can see in the example above, using Self
as a method parameter
or using Self
as a property type automatically introduces an
associated type
(like we saw with Equatable
, earlier).
The most helpful note here is that once you use a method
instead of a
property
in order to return something of type Self
you will not opt
in to an associated type
:
protocol Example {
/// No Indirect Associated Type
func builder() -> Self
}
var myExamples: [Example] = []
This example works fine. No indirect associated
type is introduced.