2016-12-22 2 views
0

Ich möchte etwas wie folgt umzusetzen: Wie eine Funktion spezifische Art in schnellen

enum ArgType { case Case1, case Case2 } 
func foo(arg: ArgType) { 
    // code 
} 

obige Code funktioniert, aber ArgType nur für die Funktion verwendet wird foo, so dass ich es vorziehen, es irgendwie „eingeschränkt“ werden in Funktionsumfang, wie soll ich das machen?


func foo(arg: T) where T = enum _ { case Case1, case Case2 } { 
    // code 
} 
// this doesn't compile, I put this here just for an example for what I want 
+0

Ich denke, die Frage ist ein wenig unklar, was versuchen Sie zu erreichen? –

+0

@AhmadF, tut mir leid. Angesichts des Codes in der Frage, ich kann eine andere Funktion schreiben 'bar (arg: ArgType) 'weil der' ArgType' ist auch sichtbar, um bar, ich möchte dies verhindern. –

Antwort

0

Sie können das Enum private nicht markieren und außerhalb des Klassenbereichs verwenden. Wenn Sie die Enumeration einkapseln möchten, definieren Sie sie möglicherweise innerhalb des Bereichs der Klasse/Struktur.

struct Identifier { 
    enum Cell { 
     case Base 
     case Home 
    } 

    func getIdentifier(identifier: Cell) -> String { 
     return "An Identifier" 
    } 
} 
+0

Ja, das Einkapseln mit der Klasse/struct/enum ist ein Workaround! –

0

, wenn es auf die Funktion beschränkt waren. wie würde man es nennen?
[im bewusst diese keine Antwort]

die Antwort lautet:
kein Mechaniker ist nur eine Art funktionieren Typen zu beschränken.
(vielleicht ist die Funktion. Ist privat und Markierung des Typs private Datei könnte helfen?)

+0

Die Idee ist wie Klasse angegebenen Typen: Ich kann einen Typ 'Foo' innerhalb einer Klasse' Bar' deklarieren und andere können nur auf diesen Typ verweisen, indem Sie 'Bar.Foo' eingeben, was explizit darauf hinweist, dass der Typ' Foo' sinnvoll ist der Kontext von "Bar". Obwohl Dinge privat gemacht werden, kann es meinen Zwang nicht erfüllen ... –