在Swift 2中实施时间框架的方法

在Swift 2中实施时间框架的方法,swift,time,calendar,nsdate,Swift,Time,Calendar,Nsdate,这是自助餐厅时间 Monday - Thursday: 10:30 am - 12:00 am Friday: 10:30 am - 9:00 pm Saturday - Sunday: Closed 我正在实现一个函数,该函数根据当前时间返回一个状态,如果该位置处于打开或关闭状态。 有没有一种更简单、更有效的方法来实现这样的事情,而不必处理复杂的“if”语句 func displayStatusForBrandywine () -> String { let

这是自助餐厅时间

Monday - Thursday: 10:30 am - 12:00 am
Friday: 10:30 am - 9:00 pm 
Saturday - Sunday: Closed
我正在实现一个函数,该函数根据当前时间返回一个状态,如果该位置处于打开或关闭状态。 有没有一种更简单、更有效的方法来实现这样的事情,而不必处理复杂的“if”语句

func displayStatusForBrandywine () -> String
    {
         let currentDateTime = NSDate()
        // get the user's calendar
        let userCalendar = NSCalendar.currentCalendar()
        // choose which date and time components are needed
        let requestedComponents: NSCalendarUnit = [
            NSCalendarUnit.Year,
            NSCalendarUnit.Month,
            NSCalendarUnit.Day,
            NSCalendarUnit.Hour,
            NSCalendarUnit.Minute,
            NSCalendarUnit.Weekday
        ]
        // get the components
        let dateTimeComponents = userCalendar.components(requestedComponents, fromDate: currentDateTime)
        var status: String = ""

        if ((dateTimeComponents.weekday >= 2 && dateTimeComponents.weekday <= 5) && (dateTimeComponents.hour >= 10 && dateTimeComponents.hour <= 23) && (dateTimeComponents.minute <= 59 && dateTimeComponents.hour != 0) || ((dateTimeComponents.weekday == 6 && dateTimeComponents.hour >= 10 && dateTimeComponents.minute >= 30 && dateTimeComponents.hour <= 21) || (dateTimeComponents.weekday == 6 && dateTimeComponents.hour >= 11 && (dateTimeComponents.hour <= 21 && dateTimeComponents.minute < 0))))
        {
            status = "Open"
        }
        else
        {
            status = "Closed"
        }
        return status
    }
func displayStatusForBrandywine()->字符串
{
让currentDateTime=NSDate()
//获取用户的日历
让userCalendar=NSCalendar.currentCalendar()
//选择需要哪些日期和时间组件
let requestedComponents:NSCalendarUnit=[
单位:年,
NSCalendar单位,月,
NSCalendarUnit.Day,
NSCalendar单位,小时,
NSCalendar单位,分钟,
NSCalendarUnit.工作日
]
//获取组件
让dateTimeComponents=userCalendar.components(requestedComponents,fromDate:currentDateTime)
变量状态:String=“”

如果((dateTimeComponents.weekday>=2&&dateTimeComponents.weekday=10&&dateTimeComponents.hour=30&&dateTimeComponents.hour=11&&dateTimeComponents.hour,这里有一个有趣的方法

struct OpenPeriod {
    var day: Int
    var openTime: Double
    var closeTime: Double

    func isOpen(dateTime: NSDate) -> Bool {
        let userCalendar = NSCalendar.currentCalendar()
        // choose which date and time components are needed
        let requestedComponents: NSCalendarUnit = [
            NSCalendarUnit.Hour,
            NSCalendarUnit.Minute,
            NSCalendarUnit.Weekday
        ]
        // get the components
        let dateTimeComponents = userCalendar.components(requestedComponents, fromDate: dateTime)
        if dateTimeComponents.weekday != self.day { return false }
        let timeOfDay = Double(dateTimeComponents.hour) + Double(dateTimeComponents.minute) / 60
        return timeOfDay >= self.openTime && timeOfDay <= self.closeTime
    }
}

var openingTimes = [OpenPeriod]()
openingTimes.append(OpenPeriod(day: 2, openTime: 10.5, closeTime: 12))
openingTimes.append(OpenPeriod(day: 3, openTime: 10.5, closeTime: 12))
openingTimes.append(OpenPeriod(day: 4, openTime: 10.5, closeTime: 12))
openingTimes.append(OpenPeriod(day: 5, openTime: 10.5, closeTime: 21))

func open(dateTime: NSDate) -> Bool {
    return openingTimes.reduce(true, combine: { $0 && $1.isOpen(dateTime) })
}

open(NSDate()) ? "Open" : "Closed"
struct OpenPeriod{
变量日:Int
var开放时间:双
var关闭时间:双倍
func isOpen(日期时间:NSDate)->Bool{
让userCalendar=NSCalendar.currentCalendar()
//选择需要哪些日期和时间组件
let requestedComponents:NSCalendarUnit=[
NSCalendar单位,小时,
NSCalendar单位,分钟,
NSCalendarUnit.工作日
]
//获取组件
让dateTimeComponents=userCalendar.components(requestedComponents,fromDate:dateTime)
如果dateTimeComponents.weekday!=self.day{return false}
让timeOfDay=Double(dateTimeComponents.hour)+Double(dateTimeComponents.minute)/60
return timeOfDay>=self.openTime和timeOfDay Bool{
返回openingTimes.reduce(true,合并:{$0&&$1.isOpen(dateTime)})
}
打开(NSDate())?“打开”:“关闭”

顺便说一句,函数读取数组的方式不对。我在操场上测试了它,只有当数组中有一个值时,它才会显示“打开”