2017-05-26 35 views
0

私はしばらく前に使っていたコードを完全に使いました。iOS Swift 3 POSTの問題

を次のコード行:var _: NSData? = NSURLConnection.sendSynchronousRequest(request as URLRequest, returning:&response) as NSData次のエラーを生成します。Call can throw, but it is not marked with 'try' and the error is not handled

私は次のように私はまだ2が残っているほとんどのエラーを修正したが、私は今3迅速である私の新しいプロジェクトでそれを使用したいと次のコード行:NSLog("Response code: %ld", res?.statusCode ?? <#default value#>);次のエラーが発生します。Editor placeholder in source file

何か助けていただければ幸いです。

以下

問題を解決するのに役立つかもしれ完全なコードです:

 func webViewDidFinishLoad(_ webView: UIWebView) { 
     UIApplication.shared.isNetworkActivityIndicatorVisible = false 

     let post:NSString = "userid=349&devicetoken=walan" 

     NSLog("PostData: %@",post); 

     let url:NSURL = NSURL(string: "https://str8red.com/updateAPN")! 

     let postData:NSData = post.data(using: String.Encoding.ascii.rawValue)! as NSData 

     let postLength:NSString = String(postData.length) as NSString 

     let request:NSMutableURLRequest = NSMutableURLRequest(url: url as URL) 
     request.httpMethod = "POST" 
     request.httpBody = postData as Data 
     request.setValue(postLength as String, forHTTPHeaderField: "Content-Length") 
     request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type") 
     request.setValue("application/json", forHTTPHeaderField: "Accept") 


     var _: NSError? 
     var response: URLResponse? 

     var _: NSData? = NSURLConnection.sendSynchronousRequest(request as URLRequest, returning:&response) as NSData 


     let res = response as! HTTPURLResponse!; 

     NSLog("Response code: %ld", res?.statusCode ?? <#default value#>); 

} 

答えて

1

あなたがしようキーワードを追加して、次のようにDO {}キャッチ{}で文を囲むことができます:

do { 

try NSURLConnection.sendSynchronousRequest(request as URLRequest, returning:&response) as NSData 
} catch { 
    print(error) 
} 

あなたはこの機能に関する警告は、iOS 9以降では廃止されました。

iOS 10、Swift 3.1の構文でどのように機能が書き換えられるのか見てみましょう。それが壊れて、あなたのレガシーコードの残りの部分と非常に異なるように見えるでしょう。お待ちください、私はこの答えを再び更新します。

は、「プレースホルダエラー」については、あなたが「内部サーバーエラー」にデフォルトに例えば「500」のようないくつかの値を入れることができます

NSLog("Response code: %ld", res?.statusCode ?? 500); 

更新:ここスウィフト3に更新機能があり、 iOS 10.

私は機能の元の意図に基づいて更新します。構文/ APIの更新だけで、削除/機能の追加は不要です。

func webViewDidFinishLoad(_ webView: UIWebView) { 
    UIApplication.shared.isNetworkActivityIndicatorVisible = false 

    let post:String = "userid=349&devicetoken=walan" 

    NSLog("PostData: %@",post); 

    let url:URL = URL(string: "https://str8red.com/updateAPN")! 

    let postData:Data = post.data(using: String.Encoding(rawValue: String.Encoding.ascii.rawValue))! 

    let postLength: String = String(postData.count) 

    var request:URLRequest = URLRequest(url: url as URL) 

    request.httpMethod = "POST" 
    request.httpBody = postData as Data 
    request.setValue(postLength, forHTTPHeaderField: "Content-Length") 
    request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type") 
    request.setValue("application/json", forHTTPHeaderField: "Accept") 

    var _: NSError? 
    var response: URLResponse? 

    URLSession.shared.dataTask(with: request) { (data, res, error) in 

     guard error == nil else { 
      print(error!) 
      return 
     } 

     response = res 
    } 

    let res = response as! HTTPURLResponse!; 

    NSLog("Response code: %ld", res?.statusCode ?? 500); 
} 
+0

満足している場合は、回答を受け入れてupvoteしてください。他の質問がある場合は、コメントしてください。 – Wismin