2016-04-04 13 views
-1

開いているときに最後のテーブルにデータをダウンロードできません。私はguardObjectのバグを提案しました。eventObjects = rootObject ["events"]? [anyオブジェクトの文字列] else {return events}。そして、anyオブジェクトのanyをAnyに置き換える必要があります。試してみて、結果は変わっていません。誰かがエラーを修正する方法を提案する経験があります。JSONデータをテーブルビューにロードできませんか?

import UIKit 

struct Event { 
    let match : String 
    let forecast : String 
    let data : String 
    let image : UIImage 
    var sports : [Sport] 

    init (match : String, forecast : String, data: String, image : UIImage, sports : [Sport]) { 

     self.match = match 
     self.forecast = forecast 
     self.data = data 
     self.image = image 
     self.sports = sports 


    } 


    static func eventsFromBundle()-> [Event] { 

     var events = [Event]() 


     guard let url = Bundle.main.url(forResource: "events", withExtension: "json") else { 
      return events 
     } 
     do { 
      let data = try Data(contentsOf: url) 
      guard let rootObject = try JSONSerialization.jsonObject(with: data, options: .allowFragments) as? [String : AnyObject] else { 

       return events 
      } 

      guard let eventObjects = rootObject["events"] as? [[String: AnyObject]] else { 
       return events 
      } 
      for eventObject in eventObjects { 
       if let match = eventObject["match"] as? String, 
        let forecast = eventObject["forecast"] as? String, 
        let data = eventObject["data"] as? String, 
        let imageName = eventObject["image"] as? String, 
        let image = UIImage(named: imageName), 
        let sportsObject = eventObject["sports"] as? [[String : String]]{ 
        var sports = [Sport]() 
        for sportObject in sportsObject { 
         if let nameTitle = sportObject["name"] , 
          let titleName = sportObject["image"], 
          let titleImage = UIImage(named: titleName + ".jpg"), 
          let prognozLabel = sportObject["prognoz"], 
          let obzor = sportObject["obzor"] { 
          sports.append(Sport(name: nameTitle, prognoz: prognozLabel, image: titleImage, obzor: obzor, isExpanded: false)) 

         } 
        } 

        let event = Event(match: match, forecast: forecast, data: data, image: image, sports: sports) 
        events.append(event) 

       } 

      } 


     } catch { 
      return events 
     } 

     return events 
    } 
} 
+0

例を得るためにサルタンの答えを使用してください:http://stackoverflow.com/questions/36180143/what-are-the-advantages-swift-deprecates-c-style-for-statement – Moritz

答えて

2

まだSwift 3はありません。 Swift 2.2でCスタイルのforループとインクリメント/デレメント演算子の廃止予定(スウィフト3での削除が約束される前)を扱うのに役立つでしょうか?

まず、投稿したコードは機能しません。

for var row = NumRows - 1; row > 0; row - 1 { 

そして、何あなたが実際に持っていることは本当にそれぞれのループを通過するにrowをデクリメントないものです:私は、これはタイプミスであると仮定します。あなたが実際に意味が第2の反復処理にした場合

for row in (0..<numRows).reverse() { 

または、(:

あなたは逆の順番で数字の列を反復処理したい場合は、最も簡単な方法は、範囲を構築し、それを逆にすることです1番目、ゼロベースのインデックスで)要素:

for row in (1..<numRows).reverse() { 

それはあなたがまでの範囲で動作することを明示的に述べていますがnumRows含まない、ではなくので(これは、また、もう少し自分の意思の表現でありますその意図を暗黙のうちに0123に残す操作。また、最初の、つまり0番目の要素を含めるかどうかについてはっきりしています。

残りのコードはそのまま使用する必要があります。

+0

ありがとうございました。 – ShurikTennisist

関連する問題