2016-08-13 65 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的教程鏈接,請在此處鏈接它們......再次感謝您的幫助。 –