从swift中的plist创建一个字典数组



我是Swift的新手(可以完成基本的Objective C,但仅限于此)。我有一个字典的plist,正在尝试将它加载到一个数组中。这是我的代码:

            let resultArray = NSArray(contentsOfFile: bundlePath)!
            var swiftArray = [Dictionary<String,String>]()
            for (var i = 0; i < resultArray.count; i++){
                swiftArray.addObject(resultArray.objectAtIndex(i))
            }

我知道resultArray是正确创建的。然而,该代码的最后一行给出了错误[(Dictionary<String,String>)] does not have a member named 'addObject'.

如何将这些词典加载到swiftArray中?

谢谢你们的帮助,伙计们。

使用append方法而不是addObject。Swift数组没有addObject方法。

swiftArray.append(resultArray.objectAtIndex(i) as Dictionary<String, String>)

或者简单地将NSArray转换为快速阵列

var swiftArray = resultArray as [AnyObject] as [Dictionary<String, String>]

使用Swift:我使用plist来存储我的字典数组,并使用NSMutableArray加载它。我在for循环中展示了一种获取下面数据的方法。

// globals
var myArray = NSMutableArray()
var SamplePath = NSString()
SamplePath = NSBundle.mainBundle().pathForResource("MyFile", ofType: "plist")!
myArray = NSMutableArray(contentsOfFile: SamplePath as String)!
var i = 0 
for myElement in myArray {
    println(myArray[i]["Title"]as! String, myArray[i]["start"]as! Int, myArray[i]["detail"]as! String)
    i++
}

当我需要进行额外操作时,我创建了一个临时结构来加载单个Dictionary的值,但简单的事情可以使用NSMutableArray:的setValue函数直接写入数组元素

myArray[Index].setValue(b, forKey:"Title").

您应该能够利用NSArray桥接,只需:

var swiftArray = NSArray(contentsOfFile: file) as! [Dictionary<String,String>] 

例如:

39> arNS
$R9: NSArray = "2 values" {
  [0] = 1 key/value pair {
    [0] = {
      0 = (instance_type = 0x0000000102002da0 )
      1 = (instance_type = 0x0000000000000003)
    }
  }
  [1] = 1 key/value pair {
    [0] = {
      0 = (instance_type = 0x00000001020060e0 )
      1 = (instance_type = 0x0000000000000003)
    }
  }
}
40> var arSW = arNS as! [[String:Int]] 
arSW: [[String : Int]] = 2 values {
  [0] = {
    [0] = {
      key = "abc"
      value = 1
    }
  }
  [1] = {
    [0] = {
      key = "xyz"
      value = 2
    }
  }
}

注:我为你离开NSArray而鼓掌。如果你发现自己需要在Swift中处理NSArray方法,你可能会考虑添加Swift Array扩展来实现NSArray方法,但要立即转换为Array。

最新更新