2016-07-22 8 views
0

私はRealmの初心者で、問題があります。だから私はそうのように、すべての「所有者」であるユーザーのリストを返す関数で変数を持っている:Realm配列の特定の結果を照会

var namesOfUsers: String = list.users 
     .flatMap({ $0 as? OwnersModel }) 
     .reduce("", combine: { (namesOfUsers, owner) -> String in 
      guard let fullName = owner.name else { 
       return namesOfUsers 
      } 

      return namesOfUsers + name + ", " 
    }) 

これらの「所有者」のいくつかはまた、「買い手」であり、一部ではありません。 「所有者」のリストを返すことはできますが、「購入者」でもある所有者は除外できますか?

+1

何買い手として所有者を修飾するのでしょうか?あなたはあなたの 'OwnersModel'を共有できますか? – marius

答えて

2

まず、reduceの代わりにflatMapjoinWithSeparatorを使用することをおすすめします。

var namesOfUsers: String = list.users 
     .flatMap({ $0 as? OwnersModel }) 
     .filter({ !$0.isBuyer }) // Rejects buyers 
     .flatMap({ $0.name }) 
     .joinWithSeparator(", ") 

これにより、構成された文字列の最後にカンマが追加されないようにすることもできます。代わりに"a, b""a, b, "。その横に

あなたのコレクションが均一であり、怠惰なコレクションは、例えばとしてレルムから取得した場合 Listまたは Resultsのインスタンスの場合は、オブジェクトをフィルタリングする代わりに NSPredicateを使用すると、データベース上で直接実行され、より高速で安価になります。

let users: Results<OwnersModel> = … 
users.filter("isBuyer == false") 
+0

ありがとう、これは私が探していた答えです! – coderdojo

関連する問題