按区分大小写属性排序Realm结果

时间:2015-02-27 14:21:41

标签: ios swift realm

我通过名为" alphabet"的属性对结果进行排序。像这样:

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

如何使用不区分大小写的方式进行排序?现在"警察"将出现在" Cat"。

之前

2 个答案:

答案 0 :(得分:4)

如果您想保留使用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)

答案 1 :(得分:1)

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

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

customCompare是您对象的一种方法:

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

在你的情况下只是:

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