2016-04-04 25 views
-1

Açık olduğunda son tabloda veri indirilemiyor. Korumada bir hata önerildi EventObjects = rootObject ["events"] olarak izin verildi? [[String: anyobject]] else {return events}. Ayrıca "anyobject" öğesini "Any" olarak değiştirmek gerekir. Bunu denedim ve sonuç değişmedi. Hatayı düzeltmeyi öneren daha deneyimli birileri var.JSON verileri tablo görünümüne yükleniyor çalışmıyor değil mi?

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

Örnek almak için Sulthan'ın yanıtını kullanın: http://stackoverflow.com/questions/36180143/what-are-the-advantages-swift-deprecates-c-style-for-statement – Moritz

cevap

2

Henüz Swift 3'ü yok. Muhtemelen, C-style for döngülerinin ve Swift 2.2'deki artış/çıktırma operatörlerinin (Swift 3'te söz verilen kaldırılmadan önce) kullanım dışı kalmasıyla ilgili yardım ister misiniz?

İlk olarak, gönderdiğiniz kod çalışmaz.

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

Ya aslında var gerçekten her döngü geçmesine üzerinde row eksiltme yok şeydir: Bu bir yazım hatası olduğunu varsayalım. (

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

Ya, ne aslında demek olsaydı ikinci gelen yineleme için:

Eğer ters sırada bir sayı dizisi yineleme yapmak istiyorsanız

, basit yolu bir dizi oluşturmak ve bunu tersine çevirmektir 1., sıfır tabanlı indeksleme) eleman:

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

(Bu kapsama kadar ama numRows yerine dahil değil çalışmak istediğiniz açıkça söylüyor, çünkü aynı zamanda niyet biraz daha etkileyici olduğunu 0123'de bu amacı örtülü bırakmakçalışması. Ayrıca, ilk dahil etmek isteyip istemediğiniz konusunda çok daha net - yani, 0 - öğe.)

Kodunuzun geri kalanı, olduğu gibi çalışmalıdır.

+0

Çok teşekkür ederim. – ShurikTennisist