Ostatnio czytałem Protocols, Generic Type Constraints and Arrays in Swift. Moje pytanie dotyczy dwóch przykładów z bloga:Zachowanie protokołów z Self
Kod:
protocol MyProtocol1 {
var myValue: Self { get }
}
let array: [MyProtocol1] = [] // Error.
Produkuje błąd:
Protocol 'MyProtocol1' can only be used as a generic constraint because it has Self or associated type requirements.
To się spodziewać i było kilka SO pytania dotyczące tematu. Jednakże, zmieniając myValue
na funkcję, nie ma już żadnego błędu, ale w obu przypadkach zwracana jest nazwa Self
.
protocol MyProtocol2 {
func myValue() -> Self
}
let array: [MyProtocol2] = [] // This is okay.
Czy ktoś zna przyczynę tego pozornie dziwnego zachowania?
Polecam omawianie tego na devforums. Podejrzewam, że jest to sprawa kątowa i może nie być zamierzona. Twórcy Swift są znacznie bardziej skłonni do udzielenia ostatecznej odpowiedzi. –
Czy w końcu znalazłeś odpowiedź na to zachowanie? – bartzy