如何在 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?