2017-01-26 3 views
0

私はホスティングしているウェブサイトのデータを更新するための小さなアプリを作っています。私は迅速な3で何も書いたことがないので、それは私に少し混乱している。Swift 3デバイスのデバッグ時にのみ下付き文字をあいまいに使用する

現在、私はピッカーで使用するためにサイトから名前のリストを取得していますが、私が使用しているサービスのURLを編集するという明らかな理由から、すべてのコードを理解できるはずです。

私は私の電話機(6s)と同じモデルに設定されているエミュレータで動作するこのコードを持っています、それはエミュレータでは動作しますが、私が試してみると、

let jsonResult = try JSONSerialization.jsonObject(with: myData, options: JSONSerialization.ReadingOptions.mutableContainers) as AnyObject 

A JSONオブジェクト:添字のあいまいな使用は、私は、シミュレータは、あなたがこれを行うには許さ方法がわからない

import UIKit 

class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource { 

@IBOutlet weak var playerTextPicker: UITextField! 

var pickOption = [String]() 
let picker = UIPickerView() 

override func viewDidLoad() { 
    super.viewDidLoad() 
    getPlayerJson() 
    picker.delegate = self 
    picker.dataSource = self 

    playerTextPicker.inputView = picker 
} 

public func numberOfComponents(in pickerView: UIPickerView) -> Int{ 
    return 1 
} 

public func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int{ 
    return pickOption.count 
} 

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 
    return pickOption[row] 
} 

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 
    playerTextPicker.text = pickOption[row] 
    self.view.endEditing(false) 
} 

func getPlayerJson(){ 
    let players = [String]() 
    let url = URL(string: "http://www.test.com/test.php") 

    let task = URLSession.shared.dataTask(with: url!) { (data, response, error) in 

     if error != nil{ 
      print("Error") 
     } 
     else{ 
      if let myData = data{ 
       do{ 
        let jsonResult = try JSONSerialization.jsonObject(with: myData, options: JSONSerialization.ReadingOptions.mutableContainers) as AnyObject 

        var jsonElement: NSDictionary = NSDictionary() 

        for i in 0 ..< jsonResult.count 
        { 

         jsonElement = jsonResult[i] as! NSDictionary //ERRORS HERE 


         //the following insures none of the JsonElement values are nil through optional binding 
         if 
          let name = jsonElement["name"] as? String 
         { 
          self.pickOption.append(name) 
         } 


        } 

       }catch{ 
        //print error 
       } 
      } 
     } 
    } 
    task.resume() 
} 
} 
+2

は - 'NSDictionary'を使用しないでください。 Swift辞書を使用してください。 – rmaddy

答えて

1

が、この行(私はコードの行を示します)配列または辞書のいずれかです。 AnyObjectはあいまいです。あなたはそれが配列だと確信している場合は、[AnyObject]にキャスト:あなたはスウィフトを使用する場合

let jsonResult = try JSONSerialization.jsonObject(with: myData, options: .mutableContainers) as! [AnyObject] 
+0

いいです、それはそれを解決しました! – Saml92

1

を、あなたは本当にスウィフトコードを使用するようにしてください。あなたのコードはSwiftではなく、Objective-CでSwiftというふりをしようとしています。

mutableContainersオプションはナンセンスで、コードの実行速度を遅くします(それが何を必要としているのか理解しているときに使用します)。代わりに[]を使用してください。

JSONSerializationがスローするケースを処理していないので、try?

JSONSerializationの結果をasにキャストしますか? [どれか]。配列をループ

:用(アイテム配列内) 辞書を取得し、それがクラッシュするのではなく、働いていたことを確認:

FYI
if let dict = item as? [AnyHashable, Any] { 
} 
+0

私は上に言ったように、チップのおかげで、私は何かのIOデベロッパをやっていないので、文字通り、オンラインのチュートリアルやスタックポストに続いて暗闇の中で文字通り刺すことになります。私は正しく学習する予定です。私はこのデータを入力しているときに私の土曜日を少し楽にするために今何か機能的なものが必要です。@Code Differentの答えが働きます – Saml92

関連する問題