2

Ray Wenderlich による JSON Parsing in Swift チュートリアルを行っていました。

DataManager.getTopAppsDataFromAppsWithSuccessinを使用している間、ブロックviewDidLoad()の外側にある場合、配列を出力できません。DataManager

誰かがそのブロックの外で配列値を取得する方法を知っていますか?

コード :

var apps = [String]()
override func viewDidLoad() {
  DataManager.getTopAppsDataFromAppsWithSuccess { (ByodData) -> Void in
    let json = JSON(data: ByodData)
       if let appArray = json.array{
        for appDict in appArray {
          var appName: String = appDict["name"].stringValue
          self.apps.append(appName)
         }
      }
  println(self.apps)
}

入力 JSON:

[
   {
       "id":1,
       "name":"AdobeReader",
       "url":"comp2014group1.herokuapp.com/apps/1.json";
   },
   {
       "id":2,
       "name":"BBCiPlayer",
       "url":"comp2014group1.herokuapp.com/apps/2.json";
   },
   {
       "id":3,
       "name":"BBCNews",
       "url":"comp2014group1.herokuapp.com/apps/3.json";
   },
   {
       "id":4,
       "name":"BBCWeather",
       "url":"comp2014group1.herokuapp.com/apps/4.json";
   }
]

出力:

[]
4

1 に答える 1

1

この関数getTopAppsDataFromAppsWithSuccessは非同期関数のようで、実行をブロックしません。したがって、println(self.apps)データが実際に取得される直前に が実行されます。

JSON データは問題ないはずです。そのように印刷しようとしないでください。準備ができたら、JSON データを使用できます。

于 2015-03-26T07:23:57.887 に答える