我在排序字符串数组时遇到问题。我尝试排序的数组派生自NSMutableDictionary中的所有键。我认为我的主要问题是价值的关键" AnyObject"而那干扰了我的排序功能。这是我到目前为止所尝试的内容:
var sections = self.sortedFriends.allKeys
尝试1
sort(§ions) {$0 < $1}
尝试2
self.sectionTitles = sections.sorted({ (str1:NSString, str2:NSString) -> Bool in
return str1 < str2
})
我一直收到错误&#34; AnyObject不是NSString&#34;的子类型。在Objective-C中,很容易使用caseInsensitiveCompare函数,但似乎不再是这种情况。如果有人可以帮助我,我会很感激。谢谢!
答案 0 :(得分:4)
您需要将[AnyObject]
转换为可以实际比较的内容。您可以在获取密钥时执行此操作:
// as? will return nil if any of the keys are not Strings, this substitutes
// an empty array in that case - you may want different handling
var sections = (self.sortedFriends.allKeys as? [String]) ?? []
或逐个投射每个元素:
// here, if an individual key is not a String, as? will
// return nil. nil is always < non-nil
sort(§ions) { ($0 as? String) < ($1 as? String) }
后者的好处是它可以处理如果一个单独的元素不是String
- as?
将返回nil
而nil
总是小于非-nil所以你的非字符串值会将一端分组。
特别是字符串,还有另外一个选项:
// with the as? String version above, 5 would come before "4"
let nsm = [3:"4", 2:5] as NSMutableDictionary
var sections = nsm.allValues
// but in this case, both are converted to strings and sort correctly
sort(§ions) { toString($0) < toString($1) }
答案 1 :(得分:3)
尝试将其强制转换为字符串,因为现在,它实际上是一个[NSObject]
类型的数组。由于接受<
的{{1}}运算符没有重载,因此它不知道该怎么做。
NSObject