gpt4 book ai didi

ios - 在 Swift 中对协议(protocol)数组进行排序?

转载 作者:行者123 更新时间:2023-11-28 06:36:37 30 4
gpt4 key购买 nike

我有很多数组存储在以下的 ViewController 中:

protocol AlarmClockType {
var alarmLabel: String { get set }
var sound: AlarmSound { get set }
var snooze: Bool { get set }
var alarmType: AlarmType { get set }
var alarmOn: Bool { get set }
var alarm: NSTimer? { get set }
var attributedTitle: NSMutableAttributedString { get }

static var DocumentsDirectory: NSURL { get }
static var ArchiveURL: NSURL { get }

func timeToAlarm(prayerTimes: [String: String]?) -> NSDate
}
}

每个实例都有一个属性 alarmTime(即 NSDate)。如何根据时间对数组进行排序?

为了更清楚:

它是一个 TableViewController,单元格显示警报时间。每次用户添加闹钟时,tableView 应按闹钟时间排序。

最佳答案

如果您想按日期对数组进行排序,使用包含 NSDate 的自定义数据结构可能会更好。

例如,您可以创建一个具有数据属性的结构。

struct Alarm {
var alarmTime: NSDate = NSDate()
var description: String = ""
}

此结构可用于创建数组。

let alarms = [
Alarm(alarmTime: NSDate().dateByAddingTimeInterval(120),
description: "alarm 60 s in the future"),
Alarm(alarmTime: NSDate().dateByAddingTimeInterval(30),
description: "alarm 30 s in the future"),
Alarm(alarmTime: NSDate().dateByAddingTimeInterval(90),
description: "alarm 90 s in the future")
]

可以使用 sort 函数和一些处理 NSDates 的特殊语法对数组进行排序。

let sortedAlarms = alarms.sort(
{ $0.alarmTime.compare($1.alarmTime) == NSComparisonResult.OrderedAscending }
)

最后,在此示例中,sortedAlarms 包含 alarms 中的所有内容,但它按 alarmTime 中的 NSDate 排序。


数组中的数据可以很容易地访问到。例如,要从排序的警报数组中的第一个警报获取警报时间,请使用以下代码。

let alarmTime = sortedAlarms[0].alarmTime

警报排序后,您需要使用 tableView.reloadData() 重新加载 TableView 中的数据。

关于ios - 在 Swift 中对协议(protocol)数组进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38928767/

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