在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())?“打开”:“关闭”
顺便说一句,函数读取数组的方式不对。我在操场上测试了它,只有当数组中有一个值时,它才会显示“打开”