2016-04-10 4 views
1

Существуют ли какие-либо соглашения для генерации текста фильтра для объектов, которые я использую в Swift?Как создать строку фильтра для JSON

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

Пример: Я класс счета в Swift и модель счета в шлейфом, я хочу, чтобы получить учетные записи с полем «активный = истина» фильтр, что мне нужно генерировать это = {"where" : {"active" : true}}

Я ввожу эти типы запросов вручную. Я уверен, что есть способ, что кто-то думал об этом, мне просто нужно ключевое слово.

PS: Я расширяю свои классы из Realm и ObjectMapper.

ответ

2

Обновленный ответ

Если я правильно понял ваш комментарий под мой первоначальный ответ, вы должны генерировать JSON Строка в виде {"where" : {"active" : true}} где true фактически является булево значение вашего Account экземпляра. Эта строка JSON будет использоваться в качестве запроса/фильтра для MongoDB.

Для этого я предлагаю добавить вычисленное свойство к классу Account. Это свойство будет использовать NSJSONSerialization для создания данных JSON из bool и использовать String() для создания JSON String с этими данными.

Пример:

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 
} 

Etc.


Предыдущий ответ

Это немного неясно, из вашего вопроса, и я не уверен, что вы имеете в виду с «Я печатаю такие запросы вручную» ...но я полагаю, что, во всяком случае, у вас есть массив из Account экземпляров.

Тогда это очень легко отфильтровать этот массив и получить только те случаи, когда active является true:

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

Здесь result представляет собой массив, содержащий только учетные записи, где active является истинным.

+0

Проблема в том, что я не владею этими экземплярами в быстром, они живут в mongoDB. Я получаю их, используя эти запросы. Спасибо – ilkerc

+0

@ilkerc Я обновил свой ответ. – Moritz

Смежные вопросы