xcodeでswift3を勉強している初心者です。
郵便番号を入力するとそれをAPIに投げて住所を取得するアプリを、サンプルコードを用いて練習しています。下記のコードを書いて実行すると、郵便番号をテキストフィールドに入力してボタンをタップした時点でエラーになります。コード中盤の太字斜体部分の
///////////////////////////////////////////////////////////
let jsonDic = try JSONSerialization.jsonObject(
with: data!, options:JSONSerialization.ReadingOptions.mutableContainers ) as! NSDictionary
///////////////////////////////////////////////////////////
でエラーが出ており、それが型の定義に関するエラーだということはわかりました(fatal error: unexpectedly found nil while unwrapping an Optional value)が、どこが問題なのかが分からず困っています。
基礎の部分だと思いますが、調べてもよく分からず質問させていただいた次第です。
どなたか教えていただければ幸いです、よろしくお願いします。
*記述コード*
import UIKit class ViewController: UIViewController { @IBOutlet weak var zipTextField: UITextField! @IBOutlet weak var addressLabel: UILabel! override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. } @IBOutlet weak var prefLabel: UILabel! override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } @IBOutlet weak var tapReturn: UITextField! @IBAction func tapSearch() { guard let ziptext = zipTextField.text else { // 値がnilだったら、終了します return } //////////////////////////////////////////////////////////////////////////////////// // リクエストするURLを作ります let urlStr = "http://api.zipaddress.net/?zipcode=\(ziptext)" if let url = URL(string: urlStr) { // urlオブジェクトがnilでなかったら、検索処理オブジェクトを作ります let urlSession = URLSession.shared //「 検索処理が完了したら、onGetAddressを呼び出す」というタスクを作ります let task = urlSession.dataTask(with: URLRequest(url:url)) { data, response, error in do { // dataをJSON解析を実行します **__ let jsonDic = try JSONSerialization.jsonObject( with: data!, options:JSONSerialization.ReadingOptions.mutableContainers ) as! NSDictionary__** //print("検査\(jsonDic)") // 解析できた値を調べていきます if let code = jsonDic["code"] as? Int { // codeという項目が整数なら、住所検索APIからのコード情報です if code != 200 { // コードが200でないときは、検索エラーです if let errmsg = jsonDic["message"] as? String { // エラーメッセージを表示します DispatchQueue.main.async { self.prefLabel.text = errmsg } } } } if let data = jsonDic["data"] as? NSDictionary { // dataという項目が辞書データなら、その中身を調べます if let pref = data["pref"] as? String { // data内のprefという項目が文字列なら、県名です DispatchQueue.main.async { self.prefLabel.text = pref } } if let address = data["address"] as? String { // data内のaddressという項目が文字列なら、住所です DispatchQueue.main.async { self.addressLabel.text = address } } } } catch { // JSON解析に失敗したときに実行します DispatchQueue.main.async { self.addressLabel.text = "エラーです" } } } // タスクを実行します task.resume() } } } ````````````````````````````````````````````````````![イメージ説明](a7242dba41154bd642e568d107599560.png)
回答2件
あなたの回答
tips
プレビュー