2015-02-18 18 views
5

Jestem nowy w Swift, ale nie mam pojęcia, co to oznacza. W wierszu kodu poniżej mam "Oczekiwane wyrażenie na liście wyrażeń" po parametrach [String]. Jak również w tym samym punkcie, że poszukuje „Oczekiwano«»separatora. Wierzę, że są one powiązane.Swift - Oczekiwane wyrażenie na liście wyrażeń

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)") 
       } 
      } 
     } 

Oto kod związany z AppDelegate

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

Kod jest niekompletny. – gabbler

+0

@gabbler Przepraszam za to. Myślałem, że to wszystko, co było potrzebne, aby pokazać problem. – Number1

+0

Gdzie umieściłeś tę metodę w appledelegate? – gabbler

Odpowiedz

2

używasz zewnętrznego nazwę parametru dla parametru podczas wywoływania funkcji, ale t parametr zewnętrzny nie jest zdefiniowany w deklaracji funkcji. Po prostu użyj go w ten sposób.

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

+0

Nadal dostaję dodatkowy argument w rozmowie – Number1

+0

Mówisz, że jest to funkcja wewnątrz AppDelegate, nie może być publiczna wewnątrz klasy. – gabbler

+0

Zaktualizowałem powyższy kod, ale nadal otrzymuję komunikat "Dodatkowy argument w rozmowie" Wierzę, że podążyłem za wszystkim, ale mogę się mylić. – Number1

1

Dzwonisz funkcję nieprawidłowo. nie trzeba się [String] w parameters param ...

AppDelegate.submitLacunaRequest(module: "empire", method: "login", parameters: ["myuserid", "mypassword", "mykey"]) { 
    ... 
} 
Powiązane problemy