2017-10-15 11 views
-1

2次元配列から追加された配列を出力しようとすると "Team"オブジェクトの2次元配列があり、 "Team"の配列が1つあります。以下のコードでは、printにエラーがあります。2次元配列は即時に範囲外のエラーを指します

self.first_array = [] 
    for i in 0..<json["LeagueStage"][0]["LeagueTable"].count { 
     guard let name = json["LeagueStage"][0]["LeagueTable"][i]["name"].string, 
      let id = json["LeagueStage"][0]["LeagueTable"][i]["id"].int, 
      let teamId = json["LeagueStage"][0]["LeagueTable"][i]["TeamID"].int, 
      let points = json["LeagueStage"][0]["LeagueTable"][i]["points"].string, 
      let played = json["LeagueStage"][0]["LeagueTable"][i]["played"].string, 
      let wins = json["LeagueStage"][0]["LeagueTable"][i]["wins"].string, 
      let draws = json["LeagueStage"][0]["LeagueTable"][i]["draws"].string, 
      let defeits = json["LeagueStage"][0]["LeagueTable"][i]["defeits"].string, 
      let goalsfor = json["LeagueStage"][0]["LeagueTable"][i]["goalsfor"].string, 
      let goalsagainst = json["LeagueStage"][0]["LeagueTable"][i]["goalsagainst"].string, 
      let average = json["LeagueStage"][0]["LeagueTable"][i]["average"].int, 
      let rank = json["LeagueStage"][0]["LeagueTable"][i]["rank"].int, 
      let hasTeamLogo = json["LeagueStage"][0]["LeagueTable"][i]["HasTeamLogo"].bool, 
      let imageUrl = json["LeagueStage"][0]["LeagueTable"][i]["TeamLogo"].string 
      else { 
       let dataFetch: [AnyHashable : Any] = 
        [ 
         NSLocalizedDescriptionKey : NSLocalizedString("Veri Yok", value: "Hata", comment: "") , 
         NSLocalizedFailureReasonErrorKey : NSLocalizedString("Veri Yok", value: "Hata", comment: "")   ] 
       let err = NSError(domain: "ShiploopHttpResponseErrorDomain", code: 401, userInfo: dataFetch) 
       self.delegate?.errorUpdating(err as NSError) 
       return 
     } 
     let temp_team = Team(id: id, 
          teamId: teamId, 
          name: name, 
          points: Int(points)!, 
          played: Int(played)!, 
          wins: Int(wins)!, 
          draws: Int(draws)!, 
          defeits: Int(defeits)!, 
          goalsfor: Int(goalsfor)!, 
          goalsagainst: Int(goalsagainst)!, 
          average: average, 
          rank: rank, 
          HasTeamLogo: hasTeamLogo, 
          imageurl: imageUrl 
     ) 
      self.first_array.append(temp_team) 
    } 
} 
    self.teams.append(first_array) 
    print(teams[0][0].name) 

初期化パート

// MARK: - Variables 
var teams = [[Team]]() 
var first_array = [Team]() 

私は以下のように行うときに、それが動作するためfirst_arrayに問題がないことを確認しています。

self.teams = [self.first_array, self.first_array] 

エラー:

fatal error: Index out of range

と私は

print(self.teams.popLast()?[0].name) 
+0

エラーログは正確に何ですか? – Tushar

+0

@Tushar致命的なエラー:インデックスが範囲外です – eonr

+0

snake_caseではなく変数にlowerCamelCase名を使用するのが慣習です。また、 'let'定数と配列リテラルを' var'変数と 'append'呼び出しよりも優先させるべきです。 – Alexander

答えて

0

self.first_arrayfirst_arrayは異なるものに言及していると、それを印刷することができます。

+0

私はコード全体を追加しました。それを確認できますか? – eonr

+0

Swift 4のCodableを使って、この狂ったjsonコードを書くのをやめてください。 – Alexander

+0

私は現在Swift 3を使用しています。 – eonr

0

上記のコードが正しい場合、問題はself.teamsはローカル変数var teams = [[Team]]()と同じではありません。 self.first_arrayおよびローカル変数first_arrayと同じです。あなたはポイントを得ることを願っています。 teams.append(first_array)を書き、代わりに var teams = [[Team]]() var first_array = [Team]()

書き込みself.teams.append(self.first_array)

代わり

self.teams = [[Team]]() self.first_array = [Team]() かを、書き込みの

をしてからself.teams = teams

は、問題を解決するには、次のいずれかを実行

+0

私はコード全体を追加しました。それを確認できますか? – eonr

-1

私は以下のコードを呼び出していました。

self.teams = [[]] 

これに変更して現在作業中です。

self.teams = [[],[]] 
関連する問題