从plist读取数组,如果找到匹配则只返回项目

时间:2015-01-28 16:41:26

标签: ios swift plist nssortdescriptor

我正试图通过一个plist工作... 现在我只想获取第1项,如果它是Soft的类型,我该如何实现呢?

我正试图通过它来解决它,但它不起作用......

 var path = NSBundle.mainBundle().pathForResource("radioChannels", ofType: "plist")
    self.menuItemArray = NSMutableArray(contentsOfFile: path!) as NSMutableArray!
    for obj: AnyObject in menuItemArray {
        if let dict = obj as? NSDictionary {
            if let menuPunkt = dict["genre"] as? String {
                if menuPunkt as String == ("Soft"){
                    println("Soft \(menuPunkt)")
                }
            } else {
                println("failed with menuPunkt")
            }
        } else {
            println("failed to convert to NSDictionary")
        }
    }

这个我只尝试但是做了工作

    var descriptor: NSSortDescriptor = NSSortDescriptor(key: "Soft", ascending: true)
    self.sortedResults = menuItemArray.sortedArrayUsingDescriptors([descriptor])

Plist

3 个答案:

答案 0 :(得分:1)

为什么不使用NSPredicate过滤流派?

 let predicate = NSPredicate(format: "genre = 'soft'")!
 let filteredArray = self.menuItems.filteredArrayUsingPredicate(predicate)

答案 1 :(得分:1)

如评论中所述,使用内置过滤器。以下代码段将为您提供一系列具有“soft”类型的项目:

if let menuItemArray = menuItemArray as? [[String:AnyObject]] {
    var softItems = menuItemArray.filter({
        if let genre = $0["genre"] as? String {
            return genre.lowercaseString == "soft"
        }
        return false
    })
    println("\(softItems)")
}

我比NSPredicate解决方案更喜欢这个解决方案有几个原因,首先,一旦你将NSMutableArray类型化为适当类型的swift数组,它几乎是纯粹的快速,其次,NSPredicate是一个漂亮的重型Objective-C蝙蝠是一个非常简单的问题。

另请注意,在加载plist时,应该一次性完成类型转换/检查,而不是每次构建视图内容时都执行它,它实际上只包含在代码片段中以保证完整性。

答案 2 :(得分:1)

也试一试这段代码!

if let path = NSBundle.mainBundle().pathForResource("radioChannels", ofType: "plist") {
            if let myArray = NSArray(contentsOfFile: path) {
                for dict in myArray {
                    if let genre = dict["genre"] as? String{

                        if genre == "genre1"  {
                            print("genre1")
                        }
                    }
                }
            }
        }