Как создать и отсортировать массив словарей поплавков - PullRequest
0 голосов
/ 16 октября 2018

У меня есть пользовательский объект, который содержит некоторые свойства, которые являются плавающими (а также другие, которые являются строками, датами и т. Д.).Отбрасывая ненулевые свойства, я хотел бы отфильтровать ненулевые свойства, отсортировать их по размеру и отобразить их.Однако, как быстрый новичок, у меня возникли проблемы.

Мой объект выглядит так:

@objc public class MyTone: NSObject {
    var title: String = ""
    var date: Date = Date()
    var val1: Float = 0
    var val2: Float = 0
    var val3: Float = 0
//...
    var val10: Float = 0;
}

Мой код, основанный на том, что я нашел в Google:

let propArray: [[String: AnyObject]] = [
            ["prop": "val1" as AnyObject,
             "value": 0.3 as AnyObject],
            ["prop":  "val2" as AnyObject,
             "value": 0.2 as AnyObject],
            ["prop": "val3" as AnyObject,
             "value": 0.4 as AnyObject]
        ]

   let sortedArray = propArray.sort { (first, second,third) in
            return first["value"]?.floatValue < second["value"]?.floatValue< third["value"]?.floatValue
        }

Fixit попросил меня вставить код anyObject, но я получаю сообщение об ошибке «Любой объект не является подтипом NSNumber».Кроме того, я не совсем понимаю, что означают первое, второе и так далее ... Эти термины понимает компилятор?Кажется, есть лучший способ сделать это.

Заранее благодарен за любые предложения.

1 Ответ

0 голосов
/ 16 октября 2018

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

Во-вторых, нет третьего параметра только функции сортировки (первый, второй).См. Документ здесь

В-третьих, для first["value"]?.floatValue необходимо указать значение по умолчанию, например, «0», поскольку оно необязательно.

let sortedArray = propArray.sorted { (first, second) -> Bool in
    return first["value"]?.floatValue ?? 0 < second["value"]?.floatValue ?? 0
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...