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

NSMutableArray with nested NSMutableDictionary or nested Subclasses

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

我有以下数据结构:

<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 的 Sub类 并构建我的数据模型,或者我应该保留我的嵌套 NSDictionaries 数据结构。

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

转换它可以为您提供编译器验证,您不必乱用字符串键来获取您的数据。所以你应该制作模型类,是的。

示例可能如下所示:

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")])]

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

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)
}