質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

1405閲覧

swiftでpost送信をしてサーバーにデータを送りたい。

a-ika

総合スコア10

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2019/10/09 06:16

前提・実現したいこと

テキストで書いたデータをサーバーに.phpで送りたくてネットのページを参考にコードを書きました。
var dic = NSJSONSerialization.JSONObjectWithData(data!, options:nil, error: nil) as NSDictionary
の部分でエラーが出てしまいます。
エラーは
Extra argument 'error' in call
Swift version 5.0.1を使用しています。

発生している問題・エラーメッセージ

Extra argument 'error' in call

該当のソースコード

var dic = NSJSONSerialization.JSONObjectWithData(data!, options:nil, error: nil) as NSDictionary

試したこと

ネットで検索したところ
do {
let json = try NSJSONSerialization.JSONObjectWithData(data, options: .AllowFragments) as! [String: AnyObject]
...
} catch let error as NSError {
// エラー処理をする
}
というやり方が出てきました。エラー処理の部分に何を書いたらよいのかわからず、他の部分にもエラーが増えたため質問することにしました。

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

書いたコードをここに張り付けます。

import UIKit

class ViewController: UIViewController, UITextFieldDelegate, URLSessionTaskDelegate{
var json:NSData!

@IBOutlet weak var textFiled: UITextField! override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } /* UITextFieldが編集された直後に呼ばれる. */ func textFieldDidBeginEditing(_ textField: UITextField){ print("textFieldDidBeginEditing:" + textField.text!) } /* UITextFieldが編集終了する直前に呼ばれる. */ func textFieldShouldEndEditing(_ textField: UITextField) -> Bool { print("textFieldShouldEndEditing:" + textField.text!) // まずPOSTで送信したい情報をセット。 let str = "text=(textField.text!)" let strData = str.data(using:.utf8) let url: NSURL = NSURL(string: "http://localhost/")! var request = NSMutableURLRequest(url: url as URL) request.httpMethod = "POST" request.httpBody = strData

//URLで特定されるリソースを実際に取得URLSessionTask

let data = URLSession.shared.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) in /*URLSession.shared.dataTask(with: request, completionHandler: { (data, response, error) in*/ if error != nil { print(error as Any) return } print("response: (response!)") let phpOutput = String(data: data!, encoding: .utf8)! print("php output: (phpOutput)") }) data.resume() /*var data = NSURLConnection.sendSynchronousRequest(request, returningResponse: nil, error: nil)*/ //(JSONSerialization)プログラムで扱えるようなデータ構造の集合体に変換すること var dic = JSONSerialization.JSONObjectWithData(data!, options: nil, error: nil) as NSDictionary return true } /* 改行ボタンが押された際に呼ばれる. */ func textFieldShouldReturn(_ textField: UITextField) -> Bool { textField.resignFirstResponder() return true }

}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

※POSTしたいというタイトルにしては質問内容がJSONパースの部分なので、質問者さんの意図を汲み取れる自信がありませんが・・・

Swiftは3.0あたりからAPIのエラー処理方法が変わりました。
たとえば

NSJSONSerialization.JSONObjectWithData(data!, options:nil, error: nil)

のように引数にNSError型の何かを受け取るAPIは、すべてdo-try-catchによるエラー捕捉構文を使う必要があります(簡略化もできますが)。

この辺りの基礎知識は
https://qiita.com/koishi/items/67cf4d0f51c4d79f1d22
を参考にしてください。

エラー処理の部分に何を書いたらよいのかわからず

data!をJSONにパースできなかった場合の処理を書いてください。
何をするかは質問者さんが考えることです。

Swift5だとたぶん以下のような感じで書けば動くと思います。

swift

1do { 2 let json = try JSONSerialization.jsonObject(with: data!, options: []) as! [String: Any] 3 print(json) 4} catch let error { 5 print(error) 6}

投稿2019/10/09 08:10

編集2019/10/10 05:00
takabosoft

総合スコア8356

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

a-ika

2019/10/10 04:19

ありがとうございます。試してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問