Сортировать по значениям bool каждого объекта и показать в виде коллекции - PullRequest
0 голосов
/ 07 марта 2019

У меня есть UITableView, внутри которого я использую UICollectionView.Таким образом, у меня есть представление нескольких коллекций - где пользователь может прокручивать по горизонтали.Теперь в моем представлении каждой коллекции есть некоторые данные для показа.Но каждый объект ячейки содержит значение bool.Если bool имеет значение false, тогда мне нужно показать, что заголовок объекта в качестве первого в моем представлении коллекции, за которым следует bool, имеет значение true.

Мой JSON выглядит следующим образом:

first obj:({
     name =ruler1;
     com = "        1";
     Dele = "";
     isTrue = false
 },
 {
     name =rule2r;
     com = "        1";
     Dele = "";
     isTrue = true
 },
 {
     name =rule3r;
     com = "        1";
     Dele = "";
     isTrue = false
 })

 sec obj:({
     name =ruler name1;
     com = "        1";
     Dele = "";
     isTrue = true
 },
 {
     name =ruler name 2;
     com = "        1";
     Dele = "";
     isTrue = false
 },
 {
     name =ruler name 3;
     com = "        1";
     Dele = "";
     isTrue = false
 })

В cellForRowAtIndexPath,Я просто показываю метку как обычно:

collectionCell.cellTitleLabel.text = Info["name"] as? String ?? ""

Но, как я могу отсортировать и показать, какой объект является ложным?Это нужно показать сначала.

Например:

ruler1 (false), rule3r(false) , rule2r(true) как то же самое.

Есть ли какое-нибудь полезное решение?Я пробовал с сортировкой, но мне не очень помогло.

Обновление:

У меня есть следующий код для отображения метки в collectionView при cellForRowAtIndexPath методе:

if let gamesList = skillInfo?["data_list"]  as? [[String: Any]] {
    let gameInfo = gamesList[indexPath.item]
    collectionCell.cellTitleLabel.text = gameInfo["name"] as? String ?? ""
}

skillInfo - это мой список JSON, который я добавил в свой пакет.

Ответы [ 3 ]

0 голосов
/ 07 марта 2019

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

let sortedArray = (myArray as NSArray).sortedArray(using: [NSSortDescriptor(key: "isTrue", ascending: false)]) as! [[String:AnyObject]]

Если вы хотите сначала получить истинное значение, тогда ascending = false, а если вы хотите сначала получить ложное значение, тогда передайте ascending = true

См. Вывод, отсортированный массив словаря на этом скриншоте.

enter image description here

0 голосов
/ 07 марта 2019

Это для сортировки массива словаря.

Если ascending = true вернет данные с isTrue = 0 первым,

, когда ascending = false вернет данные с isTrue = 1 первым.

Вы можете удовлетворить свои потребности с помощью следующей строки: Попробуйте этот код и дайте мне знать, если у вас все еще есть какие-либо проблемы.

 func sortJSONArray() {

    let bundle = Bundle.init(for: StackOverflowViewController.self)

    guard let jsonPath = bundle.path(forResource: "StackOVerflow", ofType: "json"),
        let jsonData = try? Data(contentsOf: URL(fileURLWithPath: jsonPath)) else {
            return
    }

    if let jsonObjects = (try? JSONSerialization.jsonObject(with: jsonData, options: JSONSerialization
        .ReadingOptions.allowFragments)) as? NSArray {

        let arrFiltered = jsonObjects.filter{($0 as! [String: Any])["isTrue"] as? Int == 0}
        let arrSorted = jsonObjects.sortedArray(using: [NSSortDescriptor(key: "isTrue", ascending: true)]) as! [[String:AnyObject]]

        print(arrFiltered)
        print(arrSorted)
    }
}

Это для фильтрации массива словаря, (Если вы хотитепоказать данные только для isTrue = 0)

let arrFiltered = jsonObjects.filter{($0 as! [String: Any])["status"] as? Int == 0}
0 голосов
/ 07 марта 2019

Вы можете отсортировать по этапу просмотра:

  1. Установить массив JSON в объектную модель

  2. Затем использовать эту функцию для сортировки массива

отл.ваш массив данных: arrData

, затем вы используете:

arrData.sort { (first, second) -> Bool in

return !first. isTrue

 }

, чтобы отсортировать объект ложного значения на первом месте

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...