gpt4 book ai didi

arrays - 按日期排序时 Swift 数组排序错误

转载 作者:行者123 更新时间:2023-11-28 13:13:15 28 4
gpt4 key购买 nike

我的问题是我无法按日期快速对我的数组之一进行排序。该数组充满了 AnyObjects。这是目前我对数组进行排序的代码:

sort(postsArray, {(NSDateFormatter($0 as AnyObject?).valueForKey("date")!).timeIntervalSinceNow > (NSDateFormatter($1 as AnyObject?).valueForKey("date")!).timeIntervalSinceNow})

当我对其进行硬编码以查找第一个元素的日期值时,此代码有效,但在排序过程中不起作用。它给我的错误是,“ fatal error :在展开可选值时意外发现 nil。”任何帮助将不胜感激。

最佳答案

如果您的数组中充满了 AnyObject,您需要将 AnyObject 转换为 NSDate 以对其进行排序。您可以使用 NSDate 方法 compare() 如下:

let date1 = NSDate().dateByAddingTimeInterval(1000)
let date2 = NSDate().dateByAddingTimeInterval(-1000)
let date3 = NSDate()

let postsArray:[AnyObject] = [date1,date2,date3]

let postsSorted = postsArray.sorted{($0 as! NSDate).compare($1 as! NSDate) == .OrderedAscending}

postsSorted // ["May 23, 2015, 7:35 PM", "May 23, 2015, 7:51 PM", "May 23, 2015, 8:08 PM"]

如果您的数组包含字符串,您可以创建一个扩展以将其转换为 NSDate,如下所示:

extension String{
var toDate:NSDate {
let df = NSDateFormatter()
df.dateFormat = "EEE, dd MMM yyyy HH:mm:SS zzz"
return df.dateFromString(self)!
}
}


let postsArray:[AnyObject] = ["Wed, 27 May 2015 15:12:09 EDT","Fri, 22 May 2015 15:12:09 EDT","Tue, 19 May 2015 15:12:09 EDT"]

postsArray[0] as! String

let postsSorted = postsArray.sorted { ($0 as! String).toDate.compare(($1 as! String).toDate) == .OrderedAscending}

postsSorted // "Tue, 19 May 2015 15:12:09 EDT", "Fri, 22 May 2015 15:12:09 EDT", "Wed, 27 May 2015 15:12:09 EDT"]

关于arrays - 按日期排序时 Swift 数组排序错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30417960/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com