Swift CoreDate按日期和时间提取存储为字符串和排序

问题描述:

在CoreDate表中,我将日期和时间存储为字符串,格式为 ,我有一个存储为字符串的特定原因。Swift CoreDate按日期和时间提取存储为字符串和排序

static let DateFmtVal = "dd-MM-yyyy"; 
static let TimeFmtVal = "hh:mm a"; 

现在同时获取我想要的字符串转换为日期和时间,排序在TableView中显示排序,所以用较新的行来在上面

let DateSortVar = NSSortDescriptor(key: DateCol, ascending: false) 
let TimeSortVar = NSSortDescriptor(key: TimeCol, ascending: false) 
fetchedResultsController.fetchRequest.sortDescriptors = [DateSortVar, TimeSortVar] 

在Android中,使用SQLite我得到了解决办法为:

SqlQryVar = "SELECT * FROM " + NamTblVal + 
         " ORDER BY STRFTIME('%d-%m-%Y %h:%i'," + DateCol + "|| ' ' ||" + TimeCol + ") DESC;"; 

所以好心帮我做同样的斯威夫特

+2

你不能。核心数据排序描述符只能使用固定的比较器列表并且不能使用自定义代码。您必须获取数据,然后在内存中进行分类。 –

您可以将类型为Date的计算属性添加到您的CoreData对象(在您的子类中),在那里进行转换并将其仅传递给排序描述符,并且您将在Android应用程序中获得相同的行为,但要考虑到iOS中的Android与iOS中的字符串转换日期有什么不同?并分配几个DateFormatters是昂贵的(但您可以使用一个所有的转换)。所以,如果你没有很多的日期,那么它可以为你工作,无论如何,如果你想获得正确的排序数据,那么你将不得不在某个时刻进行转换。 没有转换为日期的另一个解决方案是考虑在日期列中使用其他格式,即“yyyy-mm-dd”,那么字符串排序将与日期匹配。

+0

感谢您的提示。以“yyyy-mm-dd”格式存储字符串,排序并匹配日期。这个诀窍帮了我很多。 –