如何在Swift中从Realm数据库获取唯一值

8

我使用swiftRealm数据库开发新闻应用程序。我的数据库中有相同的新闻分类。如何从Realm数据库中获取唯一值?我使用主键。

class News: Object {

 dynamic var newsID: String = ""
 dynamic var newsTitle: String = ""
 dynamic var newsFullText: String = ""
 dynamic var newsImage: String = ""
 dynamic var newsAutor: String = ""
 dynamic var newsCommentCount: String = ""
 dynamic var newsSeenCount: String = ""
 dynamic var newsDate: String = ""
 dynamic var newsCategory: String = ""

   override static func primaryKey() -> String? {
    return "newsID"
   }
}

我正在尝试获取

let realm = try! Realm()
let menuName = realm.objects(News)
for i in menuName.filter("newsCategory") {
nameLabel.text = i.newsCategory
}

但是它不起作用。

你是否在使用主键? - Ahmad F
我更新问题。 - Janserik
1个回答

10
从Realm 3.10开始,现在可以使用Results.distinct(by:) / -[RLMResults distinctResultsUsingKeyPaths:],它返回一个Results对象,该对象仅包含给定键路径上具有唯一值的对象。
旧响应- 在Realm 3.10之前
目前还不能从Realm查询中获得类似“distinct”的功能(请跟踪这里的开放问题here)。
然而,在上面提到的线程中,用户apocolipse提出了一些解决方法(请阅读完整上下文)。
// Query all users
let allUsers = Realm().objects(User)

// Map out the user types
let allTypes = map(allUsers) { $0.type }

// Fun part: start with empty array [], add in element to reduced array if its not already in, else add empty array
let distinctTypes = reduce(allTypes, []) { $0 + (!contains($0, $1) ? [$1] : [] )

或者更好的方法是使用Set(由用户jpsim提供):

let distinctTypes = Set(Realm().objects(User).valueForKey("type") as! [String])

显然,这些解决方法不如直接的数据库查询效率高,因此请谨慎使用(并在实际负载下进行测试)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接