带有嵌套NSMutableDictionary或嵌套子类的NSMutableArray

时间:2015-03-25 09:44:51

标签: ios swift nsdictionary nsxmlparser nsmutabledictionary

我正在Swift中编写一个iOS应用程序,我正在使用NSXMLParser委托通过服务器端的Rest API从服务器解析XML数据。

我有以下数据结构:

<alarm>
      <rootcause> some properties... </rootcause>
      <symptoms>
             <symptom> some properties... </symptom>
             <symptom> some properties... </symptom>
      </symptoms>
  </alarm>

现在我正在将数据解析为NSmutableArray,其中包含每个警报的NSDictionary,其中包含每个RootCause的嵌套字典和NSMutableDictionary,症状包含每个症状的许多NSDictionary实例。

 1. NSMutableArray: alarms
    2. NSmutableDictionary: alarm
       3.NSMutabbleDictionary: rootcause
       3.NSMutableDictionary: symptoms
          4.NSMutableDictionary: symptom1
          4. NSMutableDictionary: symptom2
          .... 

当然这是一个有点复杂的数据模型,所以我的问题是我应该创建包含其他嵌套类并构建我的数据模型的NSObject子类,或者我应该保留嵌套NSDictionaries的数据结构。

或者将来管理数据模型变更和更好调试等的最佳方法是什么

2 个答案:

答案 0 :(得分:0)

转换它可以让您进行编译器验证,而且您不必乱用字符串键来获取数据。所以你应该制作模型课,是的。

示例可能如下所示:

struct Symptom {
    let id : Int
    let description : String
}

struct Cause {
    let id : Int
}

struct Alarm {
    let rootCause : Cause
    let symptoms : [Symptom]
}

let alarms : [Alarm] = [Alarm(rootCause: Cause(id: 1), symptoms: [Symptom(id: 2, description: "some description")])]

答案 1 :(得分:0)

最好的方法是创建自己的数据结构,如下所示:

class symptom
{
   let yourValue = ""
   let someOtherValue = 0
}

class alarm
{
   var rootcause = ""
   var symptoms:[symptom] = []

   //or if you have just a string
   var symptoms:[String] = []

} 

然后你所做的就是:

var alarms:[alarm] = []

for al in allAramsXML
{
    let tmp = alarm()
    for sym in al.symptoms
    {
        let tmpSym = symptom()
        tmpSym.yourValue = ""

        tmp.symptoms.append(tmpSym)
    }
    alarms.append(tmp)
}