为什么我不能在 Swift 中访问这个数组的第二级



我有以下数组,它是从PHP脚本的API调用传递的:

["playerForm": {
1 =     (
            {
        date = "2017-01-31";
        name = Dicky;
        result = L;
        "results_id" = 42;
    },
            {
        date = "2016-12-24";
        name = Dicky;
        result = W;
        "results_id" = 19;
    }
);
2 =     (
            {
        date = "2017-01-25";
        name = G;
        result = W;
        "results_id" = 38;
    },
            {
        date = "2017-01-25";
        name = G;
        result = D;
        "results_id" = 40;
    },    
            {
        date = "2017-01-21";
        name = G;
        result = L;
        "results_id" = 34;
    }
);
3 =     (
            {
        date = "2017-01-31";
        name = Sultan;
        result = W;
        "results_id" = 42;
    },
            {
        date = "2017-01-15";
        name = Sultan;
        result = L;
        "results_id" = 30;
    }
);
}]

但是我似乎无法访问它的 1,2,3 部分......

 let json = try JSONSerialization.jsonObject(with: data!, options: .allowFragments) as? [String:AnyObject]
                    print (json!)
                    if let dict = json?["playerForm"] as? [String:AnyObject] {
                        print ("step 1")
                        if let arr = dict["1"] as? [[String:String]] {

                            print ("step 2")
                            self.leagueForm = arr.flatMap { Form($0) }
                            print (self.leagueForm)
                            print (self.leagueForm.count)
                            for i in 0..<self.leagueForm.count {
                                let form = self.leagueForm[i]
                                print (form.player_results!)
                                self.formGuide.append(form.player_results!)
                            }
                            print ("now")
                            print (self.formGuide)
                            self.resultsDisplay.results = self.formGuide
                            self.resultsDisplay.results = self.resultsDisplay.results.reversed()
                            self.resultsDisplay.displayResults()
                        }
                    }

使用上面的代码,它只能到达步骤 1。

我做错了什么?

已更新程序*

  let json = try JSONSerialization.jsonObject(with: data!, options: .allowFragments) as? [String:AnyObject]
                    print (json!)
                    if let dict = json?["playerForm"] as? [String:AnyObject] {
                        print ("step 1")
                        for (_ , value) in dict {
                            if let arr = value as? [[String:Any]] {
                                print(arr)
                                //your code
                            }
                        }

                    }

自定义结构定义数组:

struct Form {
    var player_result: String?
    var player_name: String?
    var result_date: String?
    var result_id: String?
    init(_ dictionary: [String : Any]) {
        self.player_result = dictionary["result"] as? String ?? ""
        self.player_name = dictionary["name"]  as? String ?? ""
        result_date = dictionary["date"]  as? String ?? ""
        result_id = String(dictionary["results_id"]  as? Int ?? 0)
    }
 }

数组类型[[String:String]]更改为[[String:Any]],因为它包含StringNumber作为值。

if let arr = dict["1"] as? [[String:Any]] {
    print(arr)
    //your code
}

注意:您需要遍历dict字典,因为它的每个键都有数组。

for (_ , value) in dict {
    if let arr = value as? [[String:Any]] {
         print(arr)
         //your code
    }
}

最新更新