如何创建和排序浮点型字典

时间:2018-10-16 14:38:08

标签: ios swift nsarray

我有一个自定义对象,其中包含一些浮点数的属性(以及其他一些字符串,日期等)。舍弃非浮动属性,我想过滤掉非零属性,按大小对它们进行排序并显示它们。但是,作为快速的新手,我遇到了麻烦。

我的对象看起来像这样:

@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 :(得分:2)

您必须使用收集方法sorted,因为您不能对不可变值使用变异成员。

第二,仅排序函数cloure(第一个,第二个)没有第三个参数。参见文档here

第三次first["value"]?.floatValue,您必须提供默认值,例如'0',因为它是可选的。

let sortedArray = propArray.sorted { (first, second) -> Bool in
    return first["value"]?.floatValue ?? 0 < second["value"]?.floatValue ?? 0
}