2015-02-18 9 views
5

Ich bin neu zu Swift habe gelesen, aber habe keine Ahnung, was das bedeutet. In der folgenden Codezeile habe ich "Expected expression in der Liste der Ausdrücke" nach den Parametern [String]. AS gut an der gleichen Stelle für „Expected sucht‚‘Separator. Ich glaube, diese in Zusammenhang stehen.Swift - Erwarteter Ausdruck in der Liste der Ausdrücke

AppDelegate.submitLacunaRequest(module: "empire", method: "login", parameters[String]:["myuserid", "mypassword", "mykey"]) { 

      responseObject, error in 

      // some network error or programming error 

      if error != nil { 
       println("error = \(error)") 
       println("responseObject = \(responseObject)") 
       return 
      } 

      // network request ok, now see if login was successful 

      if let responseDictionary = responseObject as? NSDictionary { 
       if let errorDictionary = responseDictionary["error"] as? NSDictionary { 
        println("error logging in (bad userid/password?): \(errorDictionary)") 
       } else if let resultDictionary = responseDictionary["result"] as? NSDictionary { 
        println("successfully logged in, refer to resultDictionary for details: \(resultDictionary)") 
       } else { 
        println("we should never get here") 
        println("responseObject = \(responseObject)") 
       } 
      } 
     } 

Hier wird der zugehörige Code von AppDelegate ist

public func submitLacunaRequest (#module: String, method: String, parameters: AnyObject, completion: (responseObject: AnyObject!, error: NSError!) -> (Void)) -> NSURLSessionTask? { 

    let session = NSURLSession.sharedSession() 
    let url = NSURL(string: "https://us1.lacunaexpanse.com")?.URLByAppendingPathComponent(module) 
    let request = NSMutableURLRequest(URL: url!) 
    request.HTTPMethod = "POST" 
    request.setValue("application/json-rpc", forHTTPHeaderField: "Content-Type") 


    let requestDictionary = [ 
     "jsonrpc" : "2.0", 
     "id"  : 1, 
     "method" : "login", 
     "params" : ["myuserid", "mypassword", "mykey"] 
    ] 

    var error: NSError? 
    let requestBody = NSJSONSerialization.dataWithJSONObject(requestDictionary, options: nil, error: &error) 
    if requestBody == nil { 
     completion(responseObject: nil, error: error) 
     return nil 
    } 

    request.HTTPBody = requestBody 

    let task = session.dataTaskWithRequest(request) { 
     data, response, error in 

     // handle fundamental network errors (e.g. no connectivity) 

     if error != nil { 
      completion(responseObject: data, error: error) 
      return 
     } 

     // parse the JSON response 

     var parseError: NSError? 
     let responseObject = NSJSONSerialization.JSONObjectWithData(data, options: nil, error: &parseError) as? NSDictionary 

     if responseObject == nil { 

      // because it's not JSON, let's convert it to a string when we report completion (likely HTML or text) 

      let responseString = NSString(data: data, encoding: NSUTF8StringEncoding) as String 
      completion(responseObject: responseString, error: parseError) 
      return 
     } 

     completion(responseObject: responseObject, error: nil) 
    } 
    task.resume() 

    return task 
} 
+1

Der Code ist unvollständig. – gabbler

+0

@gabler Sorry. Ich dachte, das war alles, was benötigt wurde, um das Problem zu zeigen – Number1

+0

Wo haben Sie die Methode in appledelegate? – gabbler

Antwort

2

Sie verwenden Name externen Parameter für einen Parameter beim Aufruf der Funktion, aber t Der externe Parameter ist in Ihrer Funktionsdeklaration nicht definiert. Benutze es einfach so.

submitLacunaRequest(module: "empire", "login", ["myuserid", "mypassword", "mykey"]) {

+0

Ich bekomme immer noch zusätzliche Argument in Anruf – Number1

+0

Sie sagen, es ist eine Funktion innerhalb AppDelegate, es kann nicht öffentlich in einer Klasse sein. – gabbler

+0

Aktualisiert den Code oben, aber immer noch "Extra Argument in Anruf" Ich glaube, ich habe alles befolgt, aber ich könnte falsch liegen. – Number1

1

Sie den Aufruf der Funktion falsch. Sie brauchen nicht auf die [String] im parameters param ...

AppDelegate.submitLacunaRequest(module: "empire", method: "login", parameters: ["myuserid", "mypassword", "mykey"]) { 
    ... 
} 
Verwandte Themen