Ja próbuje wykonać następujące czynności w Swift:Dlaczego ten protokół "może być używany tylko jako ogólne ograniczenie"?
protocol ProtocolWithAlias {
typealias T
}
protocol AnotherProtocol {
func someFunc() -> ProtocolWithAlias
}
Ale pojawia się błąd: Protocol 'ProtocolWithAlias' can only be used as a generic constraint because it has Self or associated type requirements
.
Czy można zrobić coś takiego? Komunikat o błędzie (lub przynajmniej część "only be used as a generic constraint
") nie ma dla mnie większego sensu.
Używam najnowszego Xcode 6 beta 3.
Dzięki!
będzie pan wie, dlaczego to zrobić w taki sposób? Wydaje się, że jest to raczej dziwna składnia, ale może dlatego, że jestem przyzwyczajony do C# :) – MatthewSot
Problem polega na tym, że system typów nie wie, co podłączyć w powiązanym typie, jeśli tylko określisz protokół, więc zamiast tego tworzysz funkcję ogólną, która może być wyspecjalizowana w zwracaniu konkretnego konkretnego typu betonu zgodnego z protokołem, ale nie tylko "protokołem". Kompilator powinien prawdopodobnie być w stanie to zrozumieć, ale nie może obecnie. –
ładne, ale jak określić ten ogólny protokół do zmiennej instancji klasy? – Dragouf