在 Swift 中对 TableView 的 plist 数组进行排序
Posted
技术标签:
【中文标题】在 Swift 中对 TableView 的 plist 数组进行排序【英文标题】:Sorting a plist array for TableView in Swift 【发布时间】:2016-05-21 12:04:09 【问题描述】:我在 Swift 中执行 Objective C 中非常容易的事情时遇到了一些麻烦。也就是说,在填充单元格之前,在“标题”字段上按字母顺序对 plist 进行排序。
整个“排序”过程看起来在 Swift 中应该更容易,但我就是不明白。我已经拖网了,但没有得到解决方案。非常感谢任何帮助。 (我没有把所有的代码都放在这里,因为它是多余的)。
override func viewDidLoad()
super.viewDidLoad()
let documentsPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as NSString
let sourcePath = documentsPath.stringByAppendingPathComponent("MyAnnotationsUSA.plist")
if let myMuseums = NSArray(contentsOfFile: sourcePath as String)
for item in myMuseums
titleData.append(item.objectForKey("title") as! String)
subTitleData.append(item.objectForKey("subtitle") as! String)
stateData.append(item.objectForKey("state") as! String)
etc.etc......
【问题讨论】:
感谢 PravinS。在我回到它之前你做了代码编辑:-) 您想如何排序?我的意思是根据您要排序的参数? 我想对键码“title”上的数组进行排序。这就是我在 Objective C 中所做的,我想在 Swift 中做同样的事情://按标题字母顺序排序 NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"title" ascending:YES];_sortedTitle = [_content sortedArrayUsingDescriptors: @[描述符]]; 返回_sortedTitle; 【参考方案1】:您似乎过早地取消了数据的关联。这个怎么样:
var data: [(String, String, String)] = []
if let myMuseums = NSArray(contentsOfFile: sourcePath as String)
for item in myMuseums
data.append((item.objectForKey("title") as! String, item.objectForKey("subtitle") as! String, item.objectForKey("state") as! String))
data.sortInPlace($0.0 < $1.0)
titleData = data.map($0.0)
subTitle = data.map($0.1)
stateData = data.map($0.2)
...看看那些被强制解开的东西...!
【讨论】:
谢谢,但不是我想要的。在 Obj C 中,我只是用一个键对整个数组进行排序,即标题。-(NSArray *)content if (!_content) content = [[NSArray alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"MyAnnotationsUSA" ofType:@"plist"]]; NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"title" ascending:YES]; _sortedTitle = [_content sortedArrayUsingDescriptors:@[descriptor]]; return _sortedTitle;
if let path = NSBundle.mainBundle().pathForResource("MyAnnotationsUSA", ofType: "plist"), content = NSArray(contentsOfFile: path) let descriptor = NSSortDescriptor(key: "title", ascending: true) let sortedTitle = content.sortedArrayUsingDescriptors([descriptor])
有什么问题
非常感谢 Grimxn。刚出去吃午饭,很高兴回来解决问题,谢谢您的帮助。我正在下载 pList,所以没有从 mainBundle 访问它。所以我做了一些摆弄,让它工作了。再次谢谢你。我会为其他人发布代码【参考方案2】:
在 SO 上有一些很大的帮助并解决了这个问题。我正在从服务器下载 pList,因此它没有保存在 mainBundle 中。这是解决方案(请原谅我用来分隔不同元素的空白):
let documentsPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as NSString
let sourcePath = documentsPath.stringByAppendingPathComponent("MyAnnotationsUSA.plist")
if let content = NSArray(contentsOfFile: sourcePath as String)
let descriptor = NSSortDescriptor(key: "title", ascending: true)
let myMuseum = content.sortedArrayUsingDescriptors([descriptor])
for item in myMuseum
titleData.append(item.objectForKey("title") as! String)
subTitleData.append(item.objectForKey("subtitle") as! String)
【讨论】:
以上是关于在 Swift 中对 TableView 的 plist 数组进行排序的主要内容,如果未能解决你的问题,请参考以下文章
为了在 PL/SQL 中对这些数据进行排序,使用啥数据结构?
在手动创建的部分中对核心数据 tableView 行进行分组
在 Oracle PL/SQL 中对 ref_cursor 的 DISTINCT 计数
在 Swift4 中取消选中 TableView 所有 TableView 选择