表达式解析为未使用的函数(Swift)

时间:2016-09-16 01:18:49

标签: ios swift

我是快速编程的新手,如果我问一些愚蠢的东西,需要你的帮助原谅我。我正在尝试从我的UIViewController调用函数来获取对API的POST请求。调用函数就像这样

    @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)

                        }
                    }
                )
            }
        } 

Called Function就像这样

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

此外,

// 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)
        }*/
    }

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

我在调用

时遇到“表达式解析为未使用的函数”
 RequestManager.sharedInstance.postRequest(Constants.BA‌​SE_URL + Constants.LOGIN, body: requestBody, onCompletion: {(json: JSON) in{ let result = json["response"] print(result) } } )

可能是我缺少一些基本语法。任何帮助都将非常感激。

谢谢。

1 个答案:

答案 0 :(得分:3)

{ }解决问题后删除in阶段。 它应该是这样的:

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

对于闭包参数,你不应该自己输入以防止拼写错误。使用tab key选择该参数,然后按回车键,xCode将自动为您生成代码。

如果按照我刚才说的方式使用,尾部闭包将如下所示:

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