Arrays Swift 3升级错误--执行错误代码
我是swift新手,将代码升级为swift 3 Swift 2.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
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
}