在 Swift 中对协议数组进行排序?
Posted
技术标签:
【中文标题】在 Swift 中对协议数组进行排序?【英文标题】:Sort arrays of protocols in Swift? 【发布时间】:2016-08-13 02:57:28 【问题描述】:我有很多数组存储在以下 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都要按照闹钟时间排序。
【问题讨论】:
使用数组.sort函数? 【参考方案1】:如果您想按日期对数组进行排序,最好使用包含 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()
重新加载表格视图中的数据。
【讨论】:
谢谢你,这真的很有帮助! :)以上是关于在 Swift 中对协议数组进行排序?的主要内容,如果未能解决你的问题,请参考以下文章