我正在尝试通过 plist 工作... 现在我只想获取 item 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])
请您参考如下方法:
如评论中所述,使用内置过滤器。以下代码段将为您提供一系列类型为“软”的项目:
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 数组,它几乎是纯粹的 swift,其次,NSPredicate对于一个非常简单的问题来说是一个相当沉重的 Objective-C bat 。
另请注意,类型转换/检查实际上应该在加载 plist 时一次性完成,而不是在每次构建 View 内容时都进行,它实际上只是为了完整性而包含在代码段中。
