我可以创建一个不区分大小写的字符串排序描述符,如下所示:
let titleSort = NSSortDescriptor(key: "title", ascending: true,
selector: #selector(NSString.localizedCaseInsensitiveCompare))
我似乎不知道如何使用comparator
签名:
class NSSortDescriptor {
init(key: String?, ascending: Bool, comparator cmptr: @escaping Foundation.Comparator)
...
}
我是否必须从头开始创建一个新的比较器,或者是否已经存在一些东西String
?
TIA
没有用于此的全局函数,因为 Comparator 旨在执行非内置的比较。它非常灵活,因为它允许您比较两种不同类型的对象并准确定义您希望它们如何排序。在一个关于如何对这些进行排序的非常简单的演示中,我创建了一个示例,在该示例中我首先检查传入的两个对象是否是String
,如果不是,我只是将它们视为应该在同一级别订购。否则,我按字母顺序对它们进行排序(不区分大小写,因为我将它们转为小写)。显然,您可以根据您预计需要排序的内容将其变得尽可能复杂:
let descriptor = NSSortDescriptor(key: "title", ascending: true) { (string1, string2) -> ComparisonResult in
guard let s1 = string1 as? String, let s2 = string2 as? String else {
return ComparisonResult.orderedSame
}
if s1.lowercased() < s2.lowercased() {
return ComparisonResult.orderedAscending
} else if s1.lowercased() == s2.lowercased() {
return ComparisonResult.orderedSame
} else {
return ComparisonResult.orderedDescending
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)