2017-02-04 9 views
1

私は、for (_ , value) in dict {を使って、私の配列(dict)を3つのセクションに分割すると信じている次のコードを持っています。この配列を別の要素/配列に分割して、Swiftのテーブルで使用する方法は?

 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) 
           self.leagueForm = arr.flatMap { Form($0) } 

           for i in 0..<self.leagueForm.count { 

            let form = self.leagueForm[i] 
            self.formGuide.append(form.player_result!) 

           } 
           print ("break") 

          } 
         } 


         print (self.formGuide) 
        } 

私の希望は、self.leagueForm内に各プレーヤーのデータを含む3つの要素があることです。

このデータは、このカスタムクラスに入れている:私はそれが完全な配列を出力しますprint (arr)とき

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) 

    } 
} 

var leagueForm = [Form]() 

私の目的は、カスタムクラス内に3組のデータを持たせることです。各クラスは1つです。下のスクリーンショットで各プレーヤーの休憩を見ることができます。あなたは、各プレーヤーのためのフォームが一つの要素に追加されていることがわかり、この画像の最後の行で

enter image description here

。私はその結果を表示するには、テーブルに渡すことができます

[name: G , results: "W", "D", "W", "D", "W", "W", "D", "L"] 
[name: Dicky, results: "L", "L", "D", "W", "L", "W", "W", "W"] 
[name: Sultan, results: "W", "W", "D", "L", "L", "L", "D", "L"] 

私は旺旺は、次のようなものです。

どうすればよいですか?または、私がカスタムクラスをテストして、これまでのところどこにいるかを確認するにはどうすればよいですか? [] [ "結果1"、 "結果2"、 "result3":ABC、結果名]

答えて

0

あなたは

var arrResult : [String] = [] 
let arrMainData = [["name":"ABC","result":"result1"],["name":"ABC","result":"result2"],["name":"ABC","result":"result3"]] 

let name : String! = arrMainData[arrMainData.count-1]["name"] 

for index in 0...arrMainData.count-1{ 
    arrResult.append(arrMainData[index]["result"]!) 
} 

let myArr : [String: AnyObject] = ["name" : name,"arrResult":arrResult] 
print(myArr) 

結果は以下のようにする必要があり、このように達成することができますforループを実装する方法ですが、Sunilが実装した方法は機能的には同じです。あなたが単純化できることの1つは、ループを実装する方法です。インデックスを必要としない場合は、インデックスを入れないでください。_

あなたのコードのleagueFormセクションを書き直すかもしれません

for value in dict { 
    if let arr = value as? [[String:Any]] { 
     print(arr) 
     self.leagueForm = arr.flatMap { Form($0) } 

     for form in self.leagueForm { 
      self.formGuide.append(form.player_result!) 
     } 
     print ("break") 

    } 
} 
+0

@Sunilに時間を割いてくれてありがとうが、私の状況にあなたの答えを適用する方法はわかりません。 – RDowns

+0

@RDownsは 'init(_ dictionary:[String:Any]){}'の内部にstructフォームのinitメソッド –

+0

を実装していますか?または 'for i in 0 .. RDowns

0

for eachがよりswiftyある

+0

ありがとう、私は私のための私の私のために0を入れますか? RDowns

+0

私の回答を更新する – Russell

関連する問題