2016-08-13 63 views
0

反对我有以下对象类:序列化阵列中迅速

class NewsItem: NSObject { 

var storyCategory: String? 
var titleText: String? 
var paragraph1: String? 
var paragraph2: String? 
var featureImage: String? 
var secondImage: String? 
var storyDate: String? 
var majorReference: String? 
var fact: String? 
var actualFeatureImage: UIImage? // Using these two to pass the image from home to story view 
var actualSecondImage: UIImage? 

var referencesArray = [AnyObject]() 
... 

init?(dictionary: [String: AnyObject]) { 

guard 

let storyCategory = dictionary["category"] as? String, 
let titleText = dictionary["title"] as? String, 
let paragraph1 = dictionary["paragraph1"] as? String, 
let paragraph2 = dictionary["paragraph2"] as? String, 
let featureImage = dictionary["headerImage"] as? String, 
let storyDate = dictionary["date"] as? String, 
let majorReference = dictionary["majorReference"] as? String, 
let secondImage = dictionary["secondImage"] as? String 

    else { 
    return nil 
} 

self.storyCategory = storyCategory 
self.titleText = titleText 
self.paragraph2 = paragraph2 
self.paragraph1 = paragraph1 
self.featureImage = featureImage 
self.storyDate = storyDate 
self.majorReference = majorReference 
self.fact = dictionary["fact"] as? String //if there's a fact in the dict, it will be assigned and if not there'll be nil 
self.secondImage = secondImage 

let referenceObject = dictionary["reference"] as? [[String: AnyObject]] 
for object in referenceObject! { 

    self.referencesArray.append(object) 
    //print(object) 
} 

//bellow is a snippet from the method that's serializing the JSON data 

do { 
    let json = try NSJSONSerialization.JSONObjectWithData(data, options: .AllowFragments) 

    if let newsArticles = json["stories"] as? [[String: AnyObject]] { 
     for article in newsArticles { 
     let newsArticle = NewsItem(dictionary: article) 
     newsItems.append(newsArticle!) 

     } 
    } 
    } catch { 
    print("error in the news items delivery: \(error)") 
    let displayError = EHPlainAlert(title: "hmmm...", message: "\(error)", type: ViewAlertError) 
    displayError.show() 
    } 

} 
在该应用程序的后端

,我有JSON对象和每一个对象的值中的一个是如下:

我不知道如果我有JSON错误的东西,但我打算有一个引用数组,每个引用有一个引用名称(refName)和引用的URL(refURL)。

我的问题是,将上面的JSON对象添加到我的对象类的referencesArray中的最佳方法是什么。使用字典而不是数组会更好吗?如果是这样,我应该如何重新编写我的代码?

如果您需要关于代码的更多细节,请提问并且您将收到更新。谢谢!

编辑

这里的JSON全:

{ 

"stories" : [ 

    { 
    "title" : "English Premier League vs BREXIT: Who will win?", 

    "headerImage" : "http://i2.cdn.turner.com/cnnnext/dam/assets/160117112140-rooney-goal-exlarge-169.jpg", 

    "category" : "Sports", 

    "paragraph1" : "Paragraph text", 

    "paragraph2" : "More text goes here", 

    "date" : "21st July", 

    "majorReference" : "CNN", 

    "reference" : [ 
     { 
      "refName": "CNN", 
      "refURL": "http://edition.cnn.com/2016/07/19/football/brexit-effect-on-english-premier-league/index.html" 
     }, 
     { 
      "refName": "Telegraph", 
      "refURL": "http://www.telegraph.co.uk/football/2016/06/21/what-would-brexit-mean-for-the-premier-league/" 
     } 

    ], 

    "secondImage" : "http://www.telegraph.co.uk/content/dam/football/2016/06/14/02-leicester-afp-xlarge_trans++Wy_u4a9GUNQgLIY2EGV3qvLCN329DeTLuwi-bwi35Bo.jpg", 

    "fact" : "Talent will go missing" 

    }, ... 

那只是一个故事...逗号后,是另一回事。

+0

你可以发布完整的JSON吗? –

回答

1

首先,定义供大家参考的数据模型:

struct NewsItemReference { 
    var refName: String 
    var refURL: NSURL 
} 

然后修改NewsItem类,如下:如果你认为自己很快长出这种模式

class NewsItem: NSObject { 
    var referencesArray = [NewsItemReference]() 

    init?(dictionary: [String: AnyObject]) { 
     ... 
     if let references = dictionary["reference"] as? [[String: AnyObject]] { 
      for object in references { 
       guard let refName = object["refName"] as? String, 
         let refURLString = object["refURL"] as? String, 
         let refURL = NSURL(string: refURLString) else { 
        continue 
       } 

       self.referencesArray.append(NewsItemReference(refName: refName, refURL: refURL)) 
      } 
     } 
    } 

(代码是太详细),请看看一些JSON到对象的映射框架,如ObjectMapper

+0

谢谢!你的专业人员总是让它看起来很简单!关于mapper框架,作为一名初学者,我尝试过,但无法真正实现它。 。 。如果您知道任何自底向上的实现ObjectMapper lib的教程链接,请在此处链接它们......再次感谢您的帮助。 –