简体   繁体   中英

Expression resolves to an unused function (Swift)

I am new to swift programming and need bit of your help forgive me if i am asking something stupid. I am trying call a function from my UIViewController for a POST request to API. Calling function is like this

    @IBAction func actionStartSignIn(sender: AnyObject) {
            let email: String = txtEmail.text!
            let password: String = txtPassword.text!
            if !email.isEmpty && !password.isEmpty && General.isValidEmail(email) && password.characters.count>6{
                var request = RequestResponse()
                request.email = email
                request.password = password
                let isValid = NSJSONSerialization.isValidJSONObject(request)
                print(isValid)
                var requestBody: String = ""

                // Facing issue in following line
              RequestManager.sharedInstance.postRequest(Constants.BASE_URL + Constants.LOGIN, body: requestBody, onCompletion:  {(json: JSON) in{
                            let result = json["response"]
                            print(result)

                        }
                    }
                )
            }
        } 

And Called Function is like this

func postRequest(route: String, body: String, onCompletion: (JSON) -> Void) {
        makeHTTPPostRequest(route, requestBody: body, onCompletion: { json, err in
            onCompletion(json as JSON)
        })
    }

Further,

// MARK: Perform a POST Request
    private func makeHTTPPostRequest(path: String, requestBody: String, onCompletion: ServiceResponse) {
        let request = NSMutableURLRequest(URL: NSURL(string: path)!)

        // Set the method to POST
        request.HTTPMethod = "POST"

        do {
            // Set the POST body for the request
            // let jsonBody = try NSJSONSerialization.dataWithJSONObject(body, options: .PrettyPrinted)
            // request.HTTPBody = jsonBody
            request.HTTPBody = requestBody.dataUsingEncoding(NSUTF8StringEncoding);
            let session = NSURLSession.sharedSession()

            let task = session.dataTaskWithRequest(request, completionHandler: {data, response, error -> Void in
                if let jsonData = data {
                    let json:JSON = JSON(data: jsonData)
                    onCompletion(json, nil)
                } else {
                    onCompletion(nil, error)
                }
            })
            task.resume()
        }/*  catch {
            // error
            onCompletion(nil, nil)
        }*/
    }

and

typealias ServiceResponse = (JSON, NSError?) -> Void

I am facing "Expression resolves to an unused function" while calling

 RequestManager.sharedInstance.postRequest(Constants.BA‌​SE_URL + Constants.LOGIN, body: requestBody, onCompletion: {(json: JSON) in{ let result = json["response"] print(result) } } )

May be i am missing some basic syntax. Any help will be really appreciated.

Thank You.

Remove the { } phase after the in will solve the problem. It should look like this:

RequestManager.sharedInstance.postRequest(Constants.BASE_URL + Constants.LOGIN, body: requestBody, onCompletion:  {(json: JSON) in
                        let result = json["response"]
                        print(result)
                }
            )

For the closure param, you should not type it by yourself to prevent typo. Use tab key to select that param, then press enter, xCode will auto generate the code for you.

If use the way I just said, the trailing closure will look like this:

RequestManager.sharedInstance.postRequest(Constants.BASE_URL + Constants.LOGIN, body: requestBody) { (json) in
                        let result = json["response"]
                        print(result)
                }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM