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

时间:2016-10-22 10:51:14

标签: swift realm unique

我使用swiftRealm database中进行新闻申请。在我的数据库中有相同的新闻类别。如何从Realm database获得独特价值? 我使用主键

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
}

但这不起作用。

1 个答案:

答案 0 :(得分:7)

从Realm 3.10开始,现在可以

  

添加Results.distinct(by :) / - [RLMResults   distinctResultsUsingKeyPaths:],返回仅包含的结果   在给定的键路径上具有唯一值的对象。

旧回应 - 在Realm 3.10之前

尚无法从Realm查询中获取"独特的"类型的功能(跟踪未解决的问题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])

显然,解决方法并不像直接数据库查询那样高效,因此要谨慎使用(并在实际负载下进行测试)。