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

时间:2017-02-04 09:36:49

标签: ios arrays 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)

    }
 }

1 个答案:

答案 0 :(得分:1)

将数组类型[[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
    }
}