Ios 从plist读取数组,并仅在找到匹配项时返回项

Ios 从plist读取数组,并仅在找到匹配项时返回项,ios,swift,plist,nssortdescriptor,Ios,Swift,Plist,Nssortdescriptor,我正在努力克服困难。。。 现在我只想获取项目1,如果它是一种软类型,我如何实现这一点 我正试着整理我的方式通过它,但它不工作 var path = NSBundle.mainBundle().pathForResource("radioChannels", ofType: "plist") self.menuItemArray = NSMutableArray(contentsOfFile: path!) as NSMutableArray! for obj: AnyObjec

我正在努力克服困难。。。 现在我只想获取项目1,如果它是一种软类型,我如何实现这一点

我正试着整理我的方式通过它,但它不工作

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

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

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

如注释中所述,使用内置过滤器。下面的代码片段将为您提供一系列类型为“软”的项目:

我更喜欢此解决方案而不是NSPredicate解决方案,原因有两个:首先,一旦您将NSMutableArray键入适当类型的swift数组,它几乎是纯swift,其次,
NSPredicate
对于一个非常简单的问题来说是一个非常沉重的目标-C bat


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

也请尝试一下这段代码

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

顶部的循环基本上就是您要寻找的(虽然我会使用过滤器并删除大量代码。我不确定下面的排序应该完成什么,也不确定它与您的问题之间的关系。也不太清楚您的问题到底是什么。您预期不会发生什么?David我只想从plist中获取,如果有一种称为“软”的类型,不是吗然后将其加载到数组中,并在UICollectionView中显示。是否要在此plist中查找流派?是的,如果流派有一个软字符串,则将其加载到数组中,不仅仅是软项目,而是整个项目
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")
                        }
                    }
                }
            }
        }