2016-09-19 3 views
0

私はこの関数を呼び出すと、関数は値を返し、他のすべてのことを行います。どのように私は他のものの価値の終わりを返す関数を作ることができます。機能初めの戻り値

func register(parameters : [String : String]) -> Int { 

    let headers = [ 
     "content-type": "application/json", 
     "cache-control": "no-cache", 
    ] 
    var statuscode = 0 
    var postD = NSData(); 
    do { 
     let postData = try NSJSONSerialization.dataWithJSONObject(parameters, options: NSJSONWritingOptions.PrettyPrinted) 
     postD = postData; 
    }catch let error as NSError{ 
     print(error.description) 
    } 
    var request = NSMutableURLRequest(URL: NSURL(string: "\(hostUrl)/users")!, 
             cachePolicy: .UseProtocolCachePolicy, 
             timeoutInterval: 10.0) 

    request.HTTPMethod = "POST" 
    request.allHTTPHeaderFields = headers 
    request.HTTPBody = postD 

    let session = NSURLSession.sharedSession() 
    let dataTask = session.dataTaskWithRequest(request, completionHandler: { (data, response, error) -> Void in 
     if (error != nil) { 
      print(error) 
     } else { 
      let httpResponse = response as? NSHTTPURLResponse 
      statuscode = httpResponse!.statusCode 
      print("AFTER HTTP RESPONSE STATUSCODE = \(statuscode)") 

     } 
    }) 

    dataTask.resume() 
    return statuscode 
} 

イムこのように、この関数を呼び出す:

let statuscode = client.register(parameters) 
     print("denemeeeeeeeeeeeeee\(statuscode)") 

そして、これが私の出力

denemeeeeeeeeeeeeee0 
AFTER HTTP RESPONSE STATUSCODE = 400 

答えて

1

NSURLSessionでは、非同期APIであるので、私はあなたの関数は常に前に戻ります怖いですデータ要求が完了します。代替アプローチを検討する必要があります。たとえば、registerメソッドは、データタスクが完了したときに呼び出す完了クロージャを受け取ることができます。これはあなたが何をしたい達成するのに十分でない場合は

client.register(parameters, callback: { (success, response) in 
    var statuscode = 0 
    statuscode = response!.statusCode 
    print("AFTER HTTP RESPONSE STATUSCODE = \(statuscode)") 
}) 

func register(parameters : [String : String], callback: ((success: Bool, response: NSHTTPURLResponse)->Void){ 

let headers = [ 
    "content-type": "application/json", 
    "cache-control": "no-cache", 
] 
var postD = NSData(); 
do { 
    let postData = try NSJSONSerialization.dataWithJSONObject(parameters, options: NSJSONWritingOptions.PrettyPrinted) 
    postD = postData; 
}catch let error as NSError{ 
    print(error.description) 
} 
var request = NSMutableURLRequest(URL: NSURL(string: "\(hostUrl)/users")!, 
            cachePolicy: .UseProtocolCachePolicy, 
            timeoutInterval: 10.0) 

request.HTTPMethod = "POST" 
request.allHTTPHeaderFields = headers 
request.HTTPBody = postD 

let session = NSURLSession.sharedSession() 
let dataTask = session.dataTaskWithRequest(request, completionHandler: { (data, response, error) -> Void in 
    if (error != nil) { 
     print(error) 
    } else { 

     let httpResponse = response as? NSHTTPURLResponse 
     callback?(success: true, response: httpResponse) 


    } 
}) 

dataTask.resume() 
} 

とあなたの関数呼び出しで:あなたが原料のこの種を処理するためにcallback機能を実装する必要が

0

また、dispatch groupsを見ることもできます。

幸運のベスト。

+1

これは簡単な解決策であり、返却を削除することができ、必要ではないため、常に間違っている可能性があります。 –

+0

正解、私の回答で未使用の返品を削除しました。 –

関連する問題