排序数组中的Protocol Swift 吗?

发布时间: 2017/3/6 23:02:49
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我有很多的数组存储在 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
    }
}

每个实例都有属性超标 (即 NSDate)。如何可以基于时间的数组对进行排序?

为了让它更明白︰

它是 TableViewController 和单元格显示报警时间。每次用户添加报警表应按报警时间排序。

解决方法 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")
]

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

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

最后,在此示例中, sortedAlarms 包含一切在 alarms ,但它按在 NSDate alarmTime


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

let alarmTime = sortedAlarms[0].alarmTime

告警进行排序后,你将想要重新加载数据在你的表视图使用 tableView.reloadData()

官方微信
官方QQ群
31647020