2016-04-10 8 views
1

Swiftで使用するオブジェクトのフィルタテキストを生成する規則はありますか?JSONのフィルタ文字列を生成するには

class Account { 
    var active : Bool! 
    ... 
} 

例:IループバックでスウィフトでAccountクラスとAccountモデルをした、私はフィールドでアカウントを取得したい「アクティブ= true」を 私は生成する必要がフィルターがある= {"where" : {"active" : true}}

これらの種類のクエリを手作業で必要に応じて入力します。私は誰かがそれについて考えた方法があると確信しています、私はキーワードが必要です。

PS:RealmとObjectMapperからクラスを拡張します。

答えて

2

は、私は私のオリジナルの答えの下にあなたのコメントを理解していれば、あなたはに必要な答え

を更新しましたtrueが実際にあなたのAccountインスタンスのbool値である{"where" : {"active" : true}}の形でJSON 文字列を生成します。このJSON文字列は、MongoDBのクエリ/フィルタとして使用されます。

このため、計算されたプロパティをAccountクラスに追加することをお勧めします。このプロパティはNSJSONSerializationを使用して、boolからJSON データを作成し、このデータからString()を使用してJSON 文字列を作成します。

例:

class Account { 
    var active : Bool! 

    var boolQuery: String? { 
     let dict = ["where": ["active": active]] 
     if let json = try? NSJSONSerialization.dataWithJSONObject(dict, options: []), 
       query = String(data: json, encoding: NSUTF8StringEncoding) { 
      return query 
     } 
     return nil 
    } 
} 

使用:

let acc = Account() 
acc.active = true 
if let query = acc.boolQuery { 
    print(query) 
} 

プリント:

{ "" { "アクティブ":真}}

let acc = Account() 
acc.active = false 
if let query = acc.boolQuery { 
    print(query) 
} 

プリント:

{ "":{ "アクティブ":偽}}

私はあるクラス(私が得た場合は、セットアップで "誰が何をして" わからないんだけど何のために責任があります)、それはあなたが必要とするコードのようなものだと私には思われます。

また、当然のフリー機能することができます:それはあなたの質問から少し不明確だ、と私は

func boolQuery(account: Account) -> String? { 
    let dict = ["where": ["active": account.active]] 
    if let json = try? NSJSONSerialization.dataWithJSONObject(dict, options: []), 
     query = String(data: json, encoding: NSUTF8StringEncoding) { 
     return query 
    } 
    return nil 
} 


前答え

の意味がわからない "手作業でこれらの種類のクエリを入力する" ...とにかく、あなたはAccountインスタンスの配列を持っていると思います。

それから、この配列をフィルタリングし、activetrueあるインスタンスのみを取得するのは非常に簡単です:resultここ

let result = arrayOfAccounts.filter { $0.active } 

activeが真であるアカウントのみを含む配列です。

+0

問題は私がこれらのインスタンスを迅速に所有していないこと、彼らがmongoDBに住んでいることです。私はこれらのクエリを使用してそれらを取得します。ありがとう – ilkerc

+0

@ilkerc私は私の答えを更新しました。 – Moritz

関連する問題