不区分大小写对 Realm 结果进行排序 属性

Sort Realm results by case insensitive property

我正在按照名为 "alphabet" 的 属性 对结果进行排序,如下所示:

allArtists = Artist.allObjects().sortedResultsUsingProperty("alphabet", ascending: true)

如何排序不区分大小写?现在 "cop" 会出现在 "Cat".

之前

通常,您必须编写自定义比较方法:

sortedArray = [array ArrayUsingSelector:@selector(customCompare:)];

其中 customCompare 是您对象的一个​​方法:

- (NSComparisonResult)customCompare:(NSString*)string {
    return [[string lowercaseString] compare:[self.string lowercaseString]];
}

你的情况很简单:

sortedArray = [array sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];

如果您想保留使用 RLMResults 对象的好处,另一种方法是在您的模型上添加 属性 的不区分大小写的副本:

class Artist: RLMObject {
    /// Some original property you want to sort by
    dynamic var name = "" {
        didSet {
            // Keep the case-free property in sync 
            lowercaseName = name.lowercaseString
        }
    }

    /// A new property just for case-insensitive sorting
    dynamic var lowercaseName = ""
}

然后您可以在新的 属性 上排序:

let caseInsensitiveArtists = Artist.allObjects()
    .sortedResultsUsingProperty("lowercaseName", ascending: true)