2017-07-12 16 views
0

はどのように私はiOSの迅速postメソッドは

func post(link:String,passedPostString:String) { 
    let request = NSMutableURLRequest(url: NSURL(string: link)! as URL) 
    request.httpMethod = "POST" 


    request.httpBody = passedPostString.data(using: String.Encoding.utf8) 

    let task = URLSession.shared.dataTask(with: request as URLRequest) { 
     data, response, error in 

     if error != nil { 
      print("error=\(String(describing: error))") 
      print("******Error*****") 
      return 

     } 
     let responseString = NSString(data: data!, encoding: String.Encoding.utf8.rawValue) 

     print(responseString!) 




    } 
    task.resume() 
} 

が、私はフェッチされた値を返します

var link = "link" 
var passedPostString = "passedPostString" 
print(post(link: link , passedPostString: passedPostString)) 

のようなもの、それを呼び出して、戻りフェッチされた文字列とPOSTメソッドを書くのです

答えて

0

それはしばらく時間がかかるかもしれとして戻り値の型を持つことができない非同期ネットワーク呼び出しを行う機能完了する前にシステムが凍結して応答を待つことを望んでいないでしょう、それは目的を破るでしょう。あなたが代わりにリクエストは次のように終了したときに呼び出される完了の閉鎖で新しいパラメータを追加することができ

func post(link:String,passedPostString:String, completion: @escaping (String?, Error?) -> Void) { 
    let request = NSMutableURLRequest(url: NSURL(string: link)! as URL) 
    request.httpMethod = "POST" 

    request.httpBody = passedPostString.data(using: String.Encoding.utf8) 

    let task = URLSession.shared.dataTask(with: request as URLRequest) { 
     data, response, error in 

     // Make sure there is no error, else.. 
     guard error == nil else { 
      completion(nil, error) 
      return 
     } 
     let responseString = String(data: data!, encoding: String.Encoding.utf8) 

     completion(responseString, nil) 

    } 
    task.resume() 
} 
+0

ブリリアント非常@XmasRightsをありがとう@Thomas – Nabzos

0

dataTaskメソッドは非同期なので、即時の戻り値を返す方法はありません。なぜなら、これがいつ呼び出されるかわからないからです。

あなたの最善の策は、あなたのメインのコードから非同期で呼び出される終了ハンドラに渡すことです:

func post(link:String, passedPostString:String, completionHandler: @escaping (NSString) ->()) { 
    let request = NSMutableURLRequest(url: NSURL(string: link)! as URL) 
    request.httpMethod = "POST" 


    request.httpBody = passedPostString.data(using: String.Encoding.utf8) 

    let task = URLSession.shared.dataTask(with: request as URLRequest) { 
     data, response, error in 

     if error != nil { 
      print("error=\(String(describing: error))") 
      print("******Error*****") 
      return 

     } 
     let responseString = NSString(data: data!, encoding: String.Encoding.utf8.rawValue) 

     completionHandler (responseString!); 
    } 
    task.resume() 
} 


var link = "link" 
var passedPostString = "passedPostString" 
let completion = { (result: NSString) in print(result) } 
post(link: link, passedPostString: passedPostString, completionHandler: completion) 
+0

は、高速な応答のためのおかげでいつものように – Nabzos