.filter命令在swift中不能用于我的.plist

时间:2015-07-09 11:51:39

标签: swift

所以我的代码用于尝试过滤掉我创建的字典数组中的名称。我在之前的一个问题中得到了很多建议,但现在我遇到了一个新问题。我无法实际实现.filter函数。我已经尝试了许多不同的方法,但我留下了你在下面看到的代码。任何关于我可能遗失的建议都将不胜感激!我收到错误消息,表明cardArray没有名为' filter'的成员。

override func viewDidLoad() {
    super.viewDidLoad()

    let path = NSBundle.mainBundle().pathForResource("CardList", ofType: "plist")
    let plistDict = NSDictionary(contentsOfFile: "/path") as! Dictionary<String,AnyObject>
    if let cardArray: AnyObject = plistDict["array"]{
        var names = cardArray.filter {$0["Class"] == 1} .map {$0["name"]!}
    }
}

2 个答案:

答案 0 :(得分:1)

所有演员阵容都有点痛苦,我用虚拟对象测试了它。

contentsOfFile的论点必须是path而不是"/path"

if let path = NSBundle.mainBundle().pathForResource("CardList", ofType: "plist") {
  let plistDict = NSDictionary(contentsOfFile: path) as! Dictionary<String,AnyObject>
  if let cardArray = plistDict["array"] as? [AnyObject] {
    let names = cardArray.filter {$0["Class"] as! Int == 1}.map {$0["name"] as! String}
    println(names)
  }
}

编辑:

如果您只使用字符串值创建plist文件(以后可以转换字符串toInt(),那么可以减少投射

…
   if let cardArray = plistDict["array"] as? Array<[String:String]> {
     let names = cardArray.filter {$0["Class"]! == "1"}.map {$0["name"]!}
   }

答案 1 :(得分:0)

在这行代码中:

plistDict["array"]

您将AnyObject的内容存储到AnyObject类型的变量中。但是if let cardArray = plistDict["array"] as? [String] { ... } 不是数组,尽管它指向的实例实际上可以是一个数组。

你应该尝试向下转换数组 - 例如,它应该是一个字符串数组:

response.writeHead(302, {Location: encodeURI(url)});