Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在swift中对字符串数组进行排序_Ios_Sorting_Swift - Fatal编程技术网

Ios 在swift中对字符串数组进行排序

Ios 在swift中对字符串数组进行排序,ios,sorting,swift,Ios,Sorting,Swift,我在排序字符串数组时遇到问题。我试图排序的数组来自NSMutableDictionary中的所有键。我认为我的主要问题是值的键“AnyObject”,这干扰了我的排序功能。以下是我到目前为止所做的尝试: var sections = self.sortedFriends.allKeys 尝试1 sort(&sections) {$0 < $1} 排序(§ions){$0Bool-in 返回str1

我在排序字符串数组时遇到问题。我试图排序的数组来自NSMutableDictionary中的所有键。我认为我的主要问题是值的键“AnyObject”,这干扰了我的排序功能。以下是我到目前为止所做的尝试:

    var sections = self.sortedFriends.allKeys
尝试1

    sort(&sections) {$0 < $1}
排序(§ions){$0<$1}
尝试2

    self.sectionTitles = sections.sorted({ (str1:NSString, str2:NSString) -> Bool in
                    return str1 < str2
                })
self.sectionTitles=sections.sorted({(str1:NSString,str2:NSString)->Bool-in
返回str1

我不断得到错误“AnyObject不是NSString的子类型”。在Objective-C中,使用caseinsensitiviecompare函数很容易,但情况似乎不再如此。如果有人能帮助我,我将不胜感激。谢谢

尝试将其强制转换为字符串,因为现在它实际上是一个类型为
[NSObject]
的数组。由于
没有过载,因此需要将
[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(&sections) { ($0 as? String) < ($1 as? String) }

这同样有效,但我选择了另一个简单的答案。谢谢你的意见!sort(§ions){($0 as?String)<($1 as?String)}方法的一个问题是,我得到了错误“NSArray不符合MutableCollectionType”。同样的错误也发生在NSMutableArray@user3353890不幸的是,简单性隐藏了一个令人讨厌的潜在bug——如果有任何非
字符串
键,这将在运行时用断言爆发——尝试使用nsd=[“Bob”:1,5:2]作为NSDictionary;将keys=nsd.allKeys设为[String]
。事实上,在1.2测试版中,这种
as
被重命名为
as表示它很危险,可能是最好避免的。@Airspeedveloick,是的,听起来不太好。但是,按照我编写代码的其余部分的方式,字典中不应该包含任何非字符串键。不过我明白你的意思了,谢谢你的洞察力!为了安全起见,我很可能会更改我的代码。这个答案现在说明了所有可能的零错误或cast失败。
// here, if an individual key is not a String, as? will 
// return nil.  nil is always < non-nil
sort(&sections) { ($0 as? String) < ($1 as? String) }
// 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(&sections) { toString($0) < toString($1) }