如何在 Swift 3.0 中使用 keysSortedByValue?

Posted

技术标签:

【中文标题】如何在 Swift 3.0 中使用 keysSortedByValue?【英文标题】:How do I use keysSortedByValue in Swift 3.0? 【发布时间】:2016-12-09 01:31:29 【问题描述】:

我有这段代码用于获取 nsdictionary 中的最高值并添加到 NSdictionaries 数组中。转换为 swift 3 后它给了我一个错误。

self.array = (self.dict!).keysSortedByValue
                        (comparator: 
                            ($1 ).compare($0 )
                    )

我得到一个模棱两可的参考错误。比较器的格式似乎有问题,但我不知道如何更改它..有人知道吗?

【问题讨论】:

self.array 的类型是什么? 抱歉,这是一个 nsdictionaries 数组 我只是将这个应用程序更新到 swift 3 并且附加了更多代码,这是我得到的最后一个错误,所以如果我能得到这个工作它会拯救我重写一大堆东西哈哈 【参考方案1】:

编译器可能无法推断出$0 和$1,因为函数类型是(Any, Any),不能使用compare。因此,您必须将它们转换为 String(或您使用的任何符合 compare 的类型),然后返回到 Any

let dict: NSDictionary = ["3" : "Orange", "1" : "Apple", "2" : "Pear"]
let keys = dict.keysSortedByValue(comparator:  (key1: String, key2: String) in
    return key1.compare(key2)
 as! (Any, Any) -> ComparisonResult)
print(keys)

如果我使用 Swift,我更喜欢 Swift 字典。

let swiftDict = ["3" : "Orange", "1" : "Apple", "2" : "Pear"]
let swiftKeys = swiftDict.sorted(by:  $0.0 < $1.0 )

【讨论】:

第一部分不起作用,但我尝试只使用普通字典,因为它看起来更简单 如何按值排序?这就是原始代码所做的【参考方案2】:

这就是最终工作的结果。我无法让它与 NSDictionary 一起使用,所以采纳了 Frankie 的建议,只使用了普通的字典。然后使用此代码对其进行排序,然后将其附加到数组中。

self.dict = snapshot.value as? Dictionary
let sorted = self.dict.flatMap($0)?.sorted  $0.0.1 > $0.1.1 
for (name, value) in sorted! 
     self.array.append(name)

【讨论】:

以上是关于如何在 Swift 3.0 中使用 keysSortedByValue?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Alamofire 在 Xcode 8 Swift 3.0 中获取特定的 JSON?

如何使用 UserDefaults.standard 在 Swift 3.0 中保持会话?

如何使用 Swift 2.3 和 3.0 编译模块?

如何在swift 3.0中计算用户从当前位置行进的距离

如何在 swift 3.0 中使用“<null>”检查条件

如何在 Swift 3.0 中使用 SwiftyJSON 将 JSON 数据分配给 UILabel?