2015-10-19 87 views
2

您好,我无法创建从一段时间开始到另一段时间的常规时间间隔的列表。你可以帮我吗? (SWIFT 2.0)创建时间间隔Swift的列表

实施例:

我有两个时间(8:00 - 23:00)。我知道这段时间的持续时间(30分钟)。范围是创建一个时间间隔数组(8:00-8:30,8:30-9:00等)。我使用一个对象通话时间(启动:诠释,最终的:int)

谢谢

回答

4

你可以创建一个类像这样产生这样的间隔,

struct Time { 

    let start: NSTimeInterval 
    let end: NSTimeInterval 
    let interval: NSTimeInterval 

    init(start: NSTimeInterval, interval: NSTimeInterval, end: NSTimeInterval) { 
     self.start = start 
     self.interval = interval 
     self.end = end 
    } 

    init(startHour: NSTimeInterval, intervalMinutes: NSTimeInterval, endHour: NSTimeInterval) { 
     self.start = startHour * 60 * 60 
     self.end = endHour * 60 * 60 
     self.interval = intervalMinutes * 60 
    } 

    var timeRepresentations: [String] { 
     let dateComponentFormatter = NSDateComponentsFormatter() 
     dateComponentFormatter.unitsStyle = .Positional 
     dateComponentFormatter.allowedUnits = [.Minute, .Hour] 

     let dateComponent = NSDateComponents() 
     return timeIntervals.map { timeInterval in 
      dateComponent.second = Int(timeInterval) 
      return dateComponentFormatter.stringFromDateComponents(dateComponent)! 
     } 
    } 

    var timeIntervals: [NSTimeInterval]{ 
     return Array(start.stride(through: end, by: interval)) 
    } 
} 



let time = Time(startHour: 8, intervalMinutes: 30, endHour: 23) 

print(time.timeRepresentations) 

和产生,

[“8:00”,“8:30”,“9:00”,“9:30”,“10:00”,“10:30”,“11:00”,“ 11:30“, ”12:00“,”12:30“,”13:00“,”13:30“,”14:00“,”14:30“,”15:00“, ” 15:30“,”16:00“,” 16:30“,”17:00“,”17:30“,”18:00“,”18:30“, ”19:00“,”19:30“,”20:00“,”20 11:30" , “21:00”, “21:30”, “22:00”, “22:30”, “23:00”]

并检索范围,把这个代码在结束

let time = Time(startHour: 8, intervalMinutes: 30, endHour: 23) 

let ranges = time.timeRepresentations.enumerate().flatMap { index, value -> String? in 
    if index + 1 < time.timeRepresentations.count { 
     return value + " - " + time.timeRepresentations[index + 1] 
    } 
    return nil 
} 

其结果将是,

[ “8:00 - 8:30”, “8:30 - 9:00”,“9:00 - 9: 30“,”9:30 - 10:00“,”10:00 - 10:30“,”10:30 - 11:00“,”11:00 - 11:30“,”11:30 - 12 :00" ,“12:00 - 12:30”,“12:30 - 13:00”,“13:00 - 13:30”,“13:30 - 14:00”,“14:00 - 14: 30“,”14:30 - 15:00“,”15:00 - 15:30“,”15:30 - 16:00“,”16:00 - 16:30“,”16:30 - 17 :00“,”17:00 - 17:30“,”17:30 - 18:00“,”18:00 - 18:30“,”18:30 - 19:00“,”19:00 - 19:30“,”19:30 - 20:00“,”20:00 - 20:30“,”20:30 - 21:00“,”21:00 - 21:30“,”21:30 - 22:00" , “22:00 - 22:30 ”, “22:30 - 23:00”]

+0

确定,如果我想创建的两倍(例如阵列中的简单的数组:[ “8:00-8:30”,“8:30- 9:00“]),我必须修改? – SalvatoreAD

+0

@SalvatoreAD查看我的编辑 – Sandeep

+0

非常感谢:) – SalvatoreAD

0

您可以在viewDidLoad方法创建一个这样的安排计时器,但首先定义一个选择拨打您的方法电话,

let mySelector: Selector = "time:end:" 
    NSTimer.scheduledTimerWithTimeInterval(0.4, target: self, selector: mySelector, userInfo: nil, repeats: true) 

,然后定义你的时间的方法

func time(start: Int, end: Int) { 
    // code goes here, this method will called every 30 minutes. 
} 

所以现在你可以创建一个列表,并添加开始和结束PARAMS。

0

含始端的元组

let startDate = NSDate() 
let endDate = NSDate() 

var intervalsContainer = [(start: NSDate, end: NSDate)]() 

var intervalDate = startDate; 


var dateComponents30Min = NSDateComponents() 
dateComponents30Min.minute = 30 

let calendar = NSCalendar.currentCalendar() 

while(endDate.compare(intervalDate) == NSComparisonResult.OrderedDescending) { 
    let finDate = calendar.dateByAddingComponents(dateComponents30Min, toDate: intervalDate, options: [])! 
    intervalsContainer.append((intervalDate,finDate)) 
    intervalDate = finDate 
} 
+0

如果结束时间是在午夜之后,我必须修改什么? – SalvatoreAD

+0

没什么,它仍然会工作 – ogres

+0

好的,谢谢。 \t 我必须修改的内容如果我想在当前时间之前隐藏时间? – SalvatoreAD