2016-04-04 2 views
0

Ich versuche, die Zeit zu zeigen, in der etwas geöffnet ist, basierend auf dem Tag, an dem es ist. Etwas wie folgt aus:Angezeigter Text basierend darauf, an welchem ​​Tag es ist

Opening Hours 
**Monday: 8:00-17:00** 
Tuesday: 8:00-17:00 
Wednesday: 8:00-17:00 
Thursday: 8:00-17:00 
Friday: 8:00-17:00 
Saturday: 8:00-13:00 
Sunday: closed 

Oder einfach angezeigt werden

Monday: 8:00-17:00 

Meine Vermutung wäre switch-Anweisungen zu verwenden, aber was würde ich tun muss, um herauszufinden, welcher Tag es ist?

Antwort

1

Eine andere Lösung könnte sein:

import Foundation 

let today = NSDate() 
let dateFormatter = NSDateFormatter() 
let currentDay = NSCalendar.currentCalendar().component(.Weekday, fromDate:today); 

dateFormatter.dateFormat = "EEEE" 
let dayOfWeekString = dateFormatter.stringFromDate(today) 

switch currentDay 
{ 
case 2,3,4,5: 
    print("\(dayOfWeekString): 8:00 - 17:00") 

case 6: 
    print("\(dayOfWeekString): 8:00 - 13:00") 

default: 
    print("\(dayOfWeekString): closed") 
} 
1

Sie können component(_:fromDate:) verwenden, um den Wochentag ab dem aktuellen Datum abzurufen. Das würde wie folgt aussehen:

let currentDay = NSCalendar.currentCalendar().component(.Weekday, fromDate:NSDate()); 

basierend auf dem Wert Sie für currentDay erhalten Sie die richtigen Öffnungszeiten zur Verfügung stellen können.

+0

@Sultan, danke du bist richtig - Tag ist für den Tag im Monat ... – sergio

1

Sie können NSCalendar verwenden, um die Einheit .Weekday als Ganzzahl zu erhalten (Sonntag bis Samstag als 1 ... 7 für den Gregorianischen Kalender).

Wenn Sie den Wochentag als Int dargestellt haben, können Sie anstelle einer switch-Anweisung ein [Int: String] Wörterbuch für die verschiedenen Öffnungszeiten verwenden. leicht mit einem [String: String] Wörterbuch verwendet werden Diese

extension NSDate { 
    var weekday : String { 
     let formatter = NSDateFormatter() 
     formatter.dateFormat = "EEEE" 
     return formatter.stringFromDate(self) 
    } 
} 

String kehrt zum Halten des Satzes von

let calendar = NSCalendar.currentCalendar() 
let today = calendar.component(.Weekday, fromDate: NSDate()) 
    // Gregorian calendar: sunday = 0, monday = 1, ... 

let openingHours: [Int: String] = [1: "Sunday: closed", 2: "Monday: 8:00-17:00", 3: "Tuesday: 8:00-17:00"] // ... 

print("Opening hours:\n\(openingHours[today] ?? "")") 
/* Opening hours: 
    Monday: 8:00-17:00 */ 

Eine weitere Alternative ist eine berechnete Eigenschaft Erweiterung NSDate() zu erstellen, die den aktuellen Wochentag als können weekday : opening hours:

/* example usage */ 
let openingHours: [String: String] = 
    ["Sunday": "closed", 
    "Monday": "8:00-17:00", 
    "Tuesday": "8:00-17:00"] // ... 

let today = NSDate().weekday 
print("Opening hours:\n\(today): \(openingHours[today] ?? "")") 
/* Opening hours: 
    Monday: 8:00-17:00 */ 
0

Anstatt mit switch-Anweisungen gehen würde ich eine generische Lösung bevorzugen. Dies ist auch eine schöne Demonstration der Nutzung von Tupel und Typ-Aliase zur Verbesserung der Code-Ausdruckskraft und Lesbarkeit.

typealias Time = (start: Int, end: Int) 
// starting with Sunday 
let openTimes: [Time] = [(0,0), (9,17), (9,17), (9,17), (9,17), (9,17), (9,12)] 

let flags : NSCalendarUnit = [.Hour, .Weekday] 

func isOpenAtTime(date: NSDate) -> Bool { 
    let time = NSCalendar.currentCalendar().components(flags, fromDate: date) 
    let openingHours = openTimes[time.weekday - 1] 
    let hour = time.hour 
    return hour >= openingHours.start && hour <= openingHours.end 
} 

Sie könnten auch ein paar Rand Fälle behandeln, aber Sie bekommen die Idee.
Sie könnten dies mit detaillierterer Zeit arbeiten, indem Sie Minuten statt Stunden verwenden.

Verwandte Themen