Arrays Swift 3升级错误--执行错误代码

Arrays Swift 3升级错误--执行错误代码,arrays,sorting,swift3,Arrays,Sorting,Swift3,我是swift新手,将代码升级为swift 3 Swift 2.3代码如下: func sectionTite() { let keyArray:NSArray = self.messageDictionary.allKeys let sortedArray = keyArray.sortedArrayUsingComparator { (dateString1: AnyObject, dateString2: AnyObject) -> NSCompar

我是swift新手,将代码升级为swift 3

Swift 2.3代码如下:

func sectionTite() {
        let keyArray:NSArray  = self.messageDictionary.allKeys
        let sortedArray = keyArray.sortedArrayUsingComparator { (dateString1: AnyObject, dateString2: AnyObject) -> NSComparisonResult in
            let d1:NSDate = NSDate.dateFromString(dateString1 as! String, fromFormat: NSDate.DateFormat.KYYYY_MM_DD)
            let d2: NSDate = NSDate.dateFromString(dateString2 as! String, fromFormat: NSDate.DateFormat.KYYYY_MM_DD)
            return (d1 ).compare(d2 )
        }
        self.sectionArray = sortedArray
    }
Swift 3.0

func sectionTite() {
        let keyArray:NSArray  = self.messageDictionary.allKeys as NSArray
        let sortedArray = keyArray.sortedArray (comparator: { (dateString1: AnyObject, dateString2: AnyObject) -> ComparisonResult in
            let d1:Date = Date.dateFromString(dateString1 as! NSString , fromFormat: Date.DateFormat.KYYYY_MM_DD as NSString)
            print(d1)
            let d2: Date = Date.dateFromString(dateString2 as! NSString, fromFormat: Date.DateFormat.KYYYY_MM_DD as NSString)
            return (d1 ).compare(d2 )
        } as! (Any, Any) -> ComparisonResult)
        self.sectionArray = sortedArray as NSArray
    }
上面的代码崩溃状态为EXC_断点(代码1,子代码…),它没有说明崩溃的原因。keyArray由一个日期项组成。下面是代码创建问题

let keyArray:NSArray  = self.messageDictionary.allKeys as NSArray

使用本机swift类型
Array
Dictionary
而不是
NSArray
NSDictionary
。因此,将您的
sectionArray
声明为
[String]
而不是
NSArray

var sectionArray = [String]()
现在按这种方式对字典键进行排序

if let dic = self.messageDictionary as? [String:Any] {
    let keys = Array(dic.keys) as [String]
    let dateForamatter = DateFormatter()
    dateForamatter.dateFormat = Date.DateFormat.KYYYY_MM_DD //Set Your dateFormat
    self.sectionArray = keys.sorted(by: { (str1, str2) -> Bool in
        let date1 = dateForamatter.date(from: str1)! //I have force wrapped
        let date2 = dateForamatter.date(from: str2)!
        return date1 < date2
    })
}
如果让dic=self.messageDictionary as?[字符串:任意]{
将keys=数组(dic.keys)设为[字符串]
让dateForamatter=DateFormatter()
dateForamatter.dateFormat=Date.dateFormat.kyyy\u MM\u DD//设置日期格式
self.sectionArray=keys.sorted(按:{(str1,str2)->Bool-in
让date1=dateForamatter.date(from:str1)!//我已强制包装
让date2=dateForamatter.date(from:str2)!
返回日期1<日期2
})
}
让keyArray:NSArray=self.messageDictionary.allKeys作为NSArray
让dateForamatter=DateFormatter()
dateForamatter.dateFormat=Date.dateFormat.kyyy\u MM\u DD//设置日期格式
self.sectionArray=keyArray.sorted(按:{(str1,str2)->Bool-in
让date1=dateForamatter.date(from:str1 as!String)!
让date2=dateForamatter.date(from:str2 as!String)!
返回日期1<日期2
})作为NSArray
self.sectionArray=keyArray作为NSArray
}

它声明了一个错误“参数传递给不接受参数的调用”,我还需要更改self.sectionArray=keys.sorted类中的lot(按:{(str1,str2)->Bool在这一行抛出一个异常。@SinsonAntony您是否添加了相同的代码?您是否可以通过尝试编辑您的问题,因为此代码完全构建在我的Xcode 8、Swift 3中,没有任何错误。@SinsonAntony您是否可以向我显示您当前使用我的代码获得的带有错误的屏幕截图。
 let keyArray:NSArray  = self.messageDictionary.allKeys as NSArray
        let dateForamatter = DateFormatter()
                    dateForamatter.dateFormat = Date.DateFormat.KYYYY_MM_DD //Set Your dateFormat
                    self.sectionArray = keyArray.sorted(by: { (str1, str2) -> Bool in
                        let date1 = dateForamatter.date(from: str1 as! String)! 
                        let date2 = dateForamatter.date(from: str2 as! String)!
                        return date1 < date2
                    }) as NSArray

        self.sectionArray = keyArray as NSArray
    }