2015-10-19 151 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