我正试图通过一个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])
答案 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")
}
}
}
}
}