######サーバーサイドはphp7,クライアントはswift4です
######リクエストurlは正しいです。(ブラウザから確認)
#####受け取ったJSONデータをパース(解析)して格納のあと↓
print(data)で41 bytesが帰ってきました
print(error)はnil
print(json)もnil
41バイト分の何かを取得しているようですが、それをjsonに変換できていないように思います。どうすればjsonに変換できるでしょうか
swift
1import UIKit 2 3class ViewController: UIViewController, UITextFieldDelegate { 4 5 override func viewDidLoad() { 6 super.viewDidLoad() 7 // Do any additional setup after loading the view, typically from a nib. 8 textBar.delegate = self 9 textBar.placeholder = "next" 10 } 11 12 override func didReceiveMemoryWarning() { 13 super.didReceiveMemoryWarning() 14 // Dispose of any resources that can be recreated. 15 } 16 17 @IBOutlet weak var textBar: UITextField! 18 19 @IBOutlet weak var nowText: UILabel! 20 21 // データリスト 22 var dataList : [(date:String , time:String)] = [] 23 24 func textFieldShouldReturn(_ textField: UITextField) -> Bool { 25 textField.resignFirstResponder() 26 if let queryKey = textField.text { 27 print(queryKey) 28 nowmesod(keyword: queryKey) 29 } 30 return true 31 } 32 33 struct ItemJson: Codable { 34 let date: String? 35 let time: String? 36 } 37 38 struct ResultJson: Codable { 39 let item:[ItemJson]? 40 } 41 42 // now メソッド 43 func nowmesod (keyword: String) { 44 // URLをエンコードする 45 guard let keyword_encode = keyword.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else { 46 return 47 } 48 49 // リクエストURLの組み立て 50 guard let req_url = URL(string: "http://localhost/v1.php/now?query=(keyword_encode)") else { 51 return 52 } 53 print(req_url) 54 55 // リクエストに必要な情報を生成 56 let req = URLRequest(url: req_url) 57 // データ転送を管理するためにセッションを生成 58 let session = URLSession(configuration: .default, delegate: nil, delegateQueue: OperationQueue.main) 59 // リクエストをタスクとして登録 60 let task = session.dataTask(with: req, completionHandler: { 61 (data , response , error) in 62 // セッション終了 63 session.finishTasksAndInvalidate() 64 65 // do try catch エラーハンドリング 66 do { 67 // JSONDecoder のインスタンス取得 68 let decoder = JSONDecoder() 69 // 受け取ったJSONデータをパース(解析)して格納 70 let json = try decoder.decode(ResultJson.self, from: data!) 71 print(json) 72 // ResultJsonが取得てきているか確認 73 if let items = json.item { 74 self.dataList.removeAll() 75 for item in items { 76 if let date = item.date , let time = item.time { 77 let now = (date,time) 78 self.dataList.append(now) 79 // 表示 80 self.nowText.text = "(now)" 81 82 } 83 } 84 } 85 } catch { 86 print(error) 87 } 88 }) 89 task.resume() 90 } 91}