Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/119.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 二维数组在swift中给出索引超出范围的错误_Ios_Arrays_Swift - Fatal编程技术网

Ios 二维数组在swift中给出索引超出范围的错误

Ios 二维数组在swift中给出索引超出范围的错误,ios,arrays,swift,Ios,Arrays,Swift,我有一个二维数组“Team”对象和一个数组“Team”,当我试图从二维数组打印附加数组时,它给出了错误。下面的代码打印给出了错误 self.first_array = [] for i in 0..<json["LeagueStage"][0]["LeagueTable"].count { guard let name = json["LeagueStage"][0]["LeagueTable"][i]["name"].string, let

我有一个二维数组“Team”对象和一个数组“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)
我确信first_数组没有问题,因为当我喜欢下面的内容时,它可以工作

self.teams = [self.first_array, self.first_array]
错误:

致命错误:索引超出范围

我可以用打印机打印出来

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

self.first_array
first_array
是指不同的东西。

如果上述代码正确,那么问题是
self.teams
与局部变量
var teams=[[teams]](
不同。与
self.first\u数组
和本地变量
first\u数组
相同。希望你明白了

要解决此问题,请执行以下任一操作:

而不是写作
var团队=[[Team]]()
var first_数组=[Team]()

self.teams=[[Team]]()
self.first_数组=[Team]()
或者


不要使用
self.teams.append(self.first\u array)
,而是编写
teams.append(first\u array)
,然后
self.teams=teams

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

 self.teams = [[]]
我把它改成这个,它现在正在工作

self.teams = [[],[]]

错误日志确切地说是什么?@Tushar致命错误:索引超出范围swift惯例是对变量使用lowerCamelCase名称,而不是snake_大小写。此外,您应该更喜欢
let
常量和数组文本,而不是
var
变量和
append
调用。它可能会转到else条件,而不会将团队对象添加到数组中。这意味着,JSON数据可能在
LeagueTable
条目中没有名称。@或者团队数是多少?您应该看看如何使用Swift 4中的Codable,以避免编写所有这些疯狂的JSON代码。嗯。。。升级Swift 3的支持时间不会太长
self.teams = [[],[]]