Ok, więc mam jakąś klasę zdefiniowaną następująco:Dlaczego mogę wprowadzić wymagania tego samego typu w przypadku szybkich generycznych? Czy jest jakiś sposób?
public final class Process<InputType, OutputType, Memory>
i chcę zrobić z funkcji dostępnych tylko dla przypadku gdy InputType i OutputType są dokładnie tego samego typu. więc próbowałem tak jak to:
extension Process where InputType == OutputType { }
Ale to doprowadziłoby:
wymaganie tego samego typu sprawia, że parametry rodzajowe
InputType
iOutputType
równoważne
Więc ja” poszło trochę dalej i próbowałem zrobić to tak:
func bypass<SameType>() -> Process<SameType, SameType, Memory> where OutputType == InputType {}
Ale spowoduje to dokładnie ten sam błąd. Pytanie więc brzmi: dlaczego nie mogę zdefiniować generycznych w taki sposób, aby dwa typy generyczne były Równoważne, bo właśnie tego chciałem. Chciałem zdefiniować funkcję dostępną tylko dla tego przypadku, która zawiedzie w czasie kompilacji, jeśli ta reguła nie będzie przestrzegana.
Więc teraz używam coś takiego:
public static func bypass<SameType>() -> Process<SameType, SameType, Memory>
Które ostatecznie nie tylko w czasie wykonywania, a nawet wtedy, gdy tworzone ale gdy beton klasy jest wyzwalany do działania.
Czy istnieje sposób zdefiniowania extension
lub function
dla ogólnych parametrów tego samego typu, które nie zostałyby skompilowane (spowoduje błąd podczas kompilacji)?
Aktualizacja: niektóre szczegóły implementacji są pominięte przyczyną stałaby Kod nieczytelny i nie są krytyczne dla kontekstu
Dzięki temu całkowicie rozwiązuję mój problem, dopóki nie pojawi się Swift 4 –