2017-10-15 100 views
-1

我有一个“Team”对象的二维数组,并且当我尝试从2d数组打印附加数组时,它有一个“Team”数组,它会给出错误。在下面的代码打印出错。二维数组给出了索引超出范围内的错误

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

Swift约定是对变量使用lowerCamelCase名称,而不是snake_case。另外,你应该在'var'变量和'append'调用上'let'常量和数组文字。 – 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相同。希望你明白了。

要解决该问题,请执行下列操作:

,而不是写 var teams = [[Team]]() var first_array = [Team]()

self.teams = [[Team]]() self.first_array = [Team]()

,而不是self.teams.append(self.first_array),写teams.append(first_array)然后self.teams = teams

+0

我添加了整个代码。你可以请检查一下吗? – eonr

-1

我在下面的代码中调用问题的调用函数。

self.teams = [[]] 

我改变它并且它现在工作。

self.teams = [[],[]]