Ich habe eine Typologie:
%Vor%Ich möchte es erweitern, indem ich so etwas mache:
%Vor%Aber das wirft einen Kompilierungsfehler auf:
Die eingeschränkte Erweiterung muss für den nicht spezialisierten generischen Typ 'Dictionary' mit Einschränkungen deklariert werden, die durch eine Where-Klausel
angegeben werden
Am Ende mache ich:
%Vor%Gibt es einen saubereren Weg, dies zu tun?
AFAIK, nein.
Betrachten Sie das folgende Beispiel:
%Vor% Hier ist Height
kein neuer Typ, es ist nur eine Bezeichnung für Float
, also erweitern Sie einfach Float
. Wenn Sie sich Dictionary
ansehen, ist es public struct Dictionary<Key : Hashable, Value> : CollectionType, DictionaryLiteralConvertible
, was Sie mit
fügt eine Erweiterung zu Dictionary
mit spezifischen generischen Parametern hinzu.
Was ich erwarten würde, dass Sie in der Lage sein sollten, ist:
%Vor%Aber das kompiliert auch nicht, und das liegt daran, dass Sie in Swift keine Partialtypen typisieren können (dh generische Typen ohne spezifische generische Parametertypen. Siehe hier für weitere Informationen). Eine mögliche Problemumgehung für die Typisierung von generischen Typen, die unter der Antwort aufgeführt ist, die ich verknüpfte, ist
%Vor% Aber selbst dann, wenn Sie versuchen, BeaconID
zu erweitern, erhalten Sie eine Compiler-Warnung, die schließlich zum Kern des Problems führt:
"Constrained Extension muss auf dem unspezialisierten generischen Typ 'Dictionary' mit Einschränkungen deklariert werden, die durch eine Where-Klausel"
angegeben werdenTags und Links extend swift type-alias