2016-04-04 6 views
0

何日かに基づいて何かが開いている時間を表示しようとしています。このような何か:それは何日かに基づいてテキストを表示する

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 

それとも単に表示

Monday: 8:00-17:00 

私の仮定は、switch文を使用することですが、私はそれが何であるかの日を見つけるために行う必要があるでしょうか?

答えて

1

別の解決策が考えられます。

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

component(_:fromDate:)を使用すると、現在の日付から曜日を取得できます。あなたがcurrentDayのために取得する値に基づいて

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

、あなたは正しい営業時間を提供することができます:それは次のようになります。

+0

@Sulthan、ありがとうございます。今月の日は正解です... – sergio

1

を使用すると、.Weekdayユニットを整数(日曜日から土曜日はグレゴリオ暦の場合は1 ... 7)にすることができます。

switch文を使用するのではなく、Intで表される曜日が分かっている場合は、別の営業時間に[Int: String]辞書を使用できます。

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 */ 

別の方法は、この容易のセットを保持するための[String: String]辞書で使用することができるString

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

として現在の曜日を返すNSDate()に計算プロパティ拡張を作成することです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

むしろswitch文と一緒に行くよりも、私はより一般的な解決策を好むだろう。これは、コードの表現力と可読性を向上させるためにタプルと型エイリアスを活用する素晴らしいデモンストレーションです。

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 
} 

また、いくつかのエッジケースも処理したいと思うかもしれません。
時間の代わりに分を使用すると、より細かい時間でこの作業を行うことができます。