加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ios – 从一天中的小时数返回打开,关闭或关闭的功能

发布时间:2020-12-14 18:11:57 所属栏目:百科 来源:网络整理
导读:我有一堆小时的操作我想确定商店是开放,关闭还是在30,29,28,27 ……我关闭的时间我在 Xcode / Objectic-C中这样做.现在我必须这样做,让我们说50个小时的操作.我已经创建了一个函数来执行此操作,但它效率不高并且涉及很多if-else语句.这是一个小时的操作样本
我有一堆小时的操作我想确定商店是开放,关闭还是在30,29,28,27 ……我关闭的时间我在 Xcode / Objectic-C中这样做.现在我必须这样做,让我们说50个小时的操作.我已经创建了一个函数来执行此操作,但它效率不高并且涉及很多if-else语句.这是一个小时的操作样本

Monday - Thursday
7:30am - Midnight
Friday
7:30am - 10:00pm
Saturday
9:00am - 10:00pm 
Sunday
9:00am - Midnight

这是我的功能以及我如何处理它

-(BOOL) dateAndTime:(NSDate*)date getStartDay:(NSInteger)startDay getStartHour:(NSInteger)startHour getStartMin:(NSInteger)startMin getEndDay:(NSInteger)endDay getEndHour:(NSInteger)endHour getEndMin:(NSInteger)endMin{

    NSCalendar *calendar = [NSCalendar currentCalendar];


    const NSCalendarUnit units = NSWeekdayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit;
    NSDateComponents *comps = [calendar components:units fromDate:date];

    if (comps.weekday == 1) {
        comps.weekday = 7;
    }
    else comps.weekday = comps.weekday - 2;

    NSDate *startOfToday;
    [[NSCalendar currentCalendar] rangeOfUnit:NSDayCalendarUnit startDate:&startOfToday interval:NULL forDate:date];

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    NSTimeZone *timeZone = [NSTimeZone localTimeZone];
    [dateFormatter setDateFormat:@"HH:mm"];
    [dateFormatter setTimeZone:timeZone];


    NSString *dateString = [dateFormatter stringFromDate:date];

    NSDate *startDate = [dateFormatter dateFromString:[NSString stringWithFormat:@"%ld:%ld",(long)startHour,(long)startMin]];
    NSDate *endDate = [dateFormatter dateFromString:[NSString stringWithFormat:@"%ld:%ld",(long)endHour,(long)endMin]];

    NSString *startDateString = [dateFormatter stringFromDate:startDate];
    NSString *endDateString = [dateFormatter stringFromDate:endDate];


    if ([startDateString compare:dateString] == NSOrderedAscending && [dateString compare:endDateString] == NSOrderedAscending && startDay <= comps.weekday && comps.weekday <= endDay) {
        return YES;
    }
    else return NO;

}

现在我过了一天,从0-6(0是星期一),然后是24小时的时间.然后像这样使用它:

if ([self dateAndTime:date getStartDay:0 getStartHour:7 getStartMin:30 getEndDay:3 getEndHour:23 getEndMin:30] == YES)
        text = @"Open";

    else if ([self dateAndTime:date getStartDay:0 getStartHour:23 getStartMin:30 getEndDay:3 getEndHour:24 getEndMin:0] == YES)
        text = [NSString stringWithFormat:@"Closes in %@ min",countdownNumber];
else text = @"Closed";

正如你所看到的那样,对于每周的所有日子和每天的小时,它需要大量的if语句并且非常糟糕.仅举一例,它需要8个if-else语句(非常耗时)

现在这个问题的基础是我怎样才能使这个更有效率/更好的方法来做到这一点,而在过去的30分钟里能够倒计时?

我已经做了一些研究,找不到有什么东西可以倒计时什么时候关闭并且效率很高.

如果您需要该示例,或者想要查看https://gist.github.com/spennyf/b0b18e31c3e9deaa0455,则以下是该示例的完整if-else语句

感谢您的帮助和/或建议:)

编辑

这是我的.m文件的顶部我有这个

@interface HomeTableViewController () {

    ShopHours WeekSchedule[];
}

@end

但是这给了我在评论中谈到的编译错误,如何设置这个变量以便它可以在整个这个.m文件中使用?现在我只是传递它作为功能的额外栏杆,应该没问题.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读