2016-05-12 16 views
0

Ich bin neu in iOS Swift 2.kann nicht Enum-Typ als Parameter Art der Funktion übergeben

Ich habe eine einfache Funktion definiert:

// ERROR: 'Method' is ambiguous for type lookup in this context 
func sendRequest(method: Method, resource: String) -> NSDictionary { 
    Alamofire.request(method, "https://httpbin.org/get") 
} 

Wie Sie sehen, definiert ich der erste Parameter hat Typ Method, die von Alamofire verwendet wird. Ich schaute in den Method, es ist ein Enum wie unten definiert ist:

public enum Method: String { 
    case OPTIONS, GET, HEAD, POST, PUT, PATCH, DELETE, TRACE, CONNECT 
} 

Warum ich nicht Aufzählungstyp als Parametertyp meiner Funktion verwenden kann?

(Der Grund, warum ich tun möchte, ist dies will ich nicht String Typ übergeben und überprüfen, ob String zB ist 'get' dann .GET verwenden, so, ich möchte den Method Enum-Wert an die Funktion direkt zu übergeben.)

==== ==== Update

Method von Alamofire Bibliothek ist, kann ich nichts ändern. Sieht aus wie es ein Namenskonflikt ist. Aber wie wird dieses Problem gelöst?

+0

Wahrscheinlich einen Namenskonflikt mit einem anderen Typ namens 'Method'. Ändern Sie den Namen der Enumeration oder setzen Sie ihn mit dem Modulnamen ('Appname.Method') voran. – dan

+0

Ich habe meinen Beitrag aktualisiert. 'Methode' stammt aus der Alamofire-Bibliothek. –

+0

Verwenden Sie 'Alamofire.Method' als den Typnamen in Ihrer Funktion – dan

Antwort

1

Dort Compiler sieht mehr als einen Typ mit dem Namen Method (Alamofire.Method und ObjectiveC.Method) und weiß nicht, welche Sie für Ihre Funktion verwenden möchten.

Sie haben die Typnamen mit dem Modulnamen voranstellen, ihm zu sagen, die man zu verwenden:

func sendRequest(method: Alamofire.Method, resource: String) -> NSDictionary { 
    Alamofire.request(method, "https://httpbin.org/get") 
} 
+0

Ja, das stimmt. Vielen Dank. –

0

Method ist mehrdeutig mit dem Laufzeittyp mit dem gleichen Namen. Ich empfehle, einen anderen Typnamen auszuwählen, der nicht mit vorhandenen Typen kollidiert.

+0

Ich habe meinen Beitrag aktualisiert. 'Methode' ist von Alamofire-Bibliothek, ich kann nichts ändern. Wie wird dieses Problem gelöst? –

Verwandte Themen