私は公共のトランジットサービスからの出発時間を示すwatchOS 3の合併症を作成しています。私は、stationName
(文字列)とdepartureTime
(NSDate)を持つTrain
オブジェクトを含む配列を持つデータモデルを作成しました。watchOS - コンプリケーションが前のエントリーを示しています
私はgetCurrentTimelineEntry()メソッドを実装しており、エントリは時計に表示されています。問題は、時計が前のエントリだけを表示することです。
Train(startStation: "Station name", endStation: "Station name", departureTime: stringToDate(dateString: "2016-06-20 14:00")),
Train(startStation: "Station name", endStation: "Station name", departureTime: stringToDate(dateString: "2016-06-20 14:30")),
Train(startStation: "Station name", endStation: "Station name", departureTime: stringToDate(dateString: "2016-06-20 14:45")),
現在時刻が14:10である場合には、(時間14時00分との)最初のエントリは、まだ時計に表示されている:例えば、私は次の出発時刻をしました。現在の時刻が14:30になるまで、そのエントリが表示されます。現在の時刻が14:10の場合は、時計の14:30の出発時刻が表示されます。
誰でも私にこれを助けたり、正しい方向に私を指摘できますか?
func getCurrentTimelineEntry(for complication: CLKComplication, withHandler handler: ((CLKComplicationTimelineEntry?) -> Void)) {
if let train = dataProvider.getTrains().nextTrain() {
handler(timelineEntryForTrain(train: train))
} else {
handler(nil)
}
}
extension Array where Element : OnRailable {
func nextTrain() -> Element?{
let now = NSDate()
for d in self {
if now.compare(d.departureTime) == .orderedAscending{
return d
}
}
return nil
}
}