私は以下の関数(datesCheck)を使って日付の配列を循環させ、最初に複数の日がある場合はすべてのエントリを削除し、配列内で日付が連続しているかどうかをチェックします現在の日付から連続した日数を返します。月曜日を効果的に土曜日と日曜日を無視 - 連続した日付が金曜日チェックチェッカーで、金曜日 -配列で連続する平日をチェックする方法
func datesCheck(_ dateArray: [Date]) -> Int {
let calendar = Calendar.current
let uniqueDates = NSSet(array: dateArray.map { calendar.startOfDay(for: $0) }).sorted {
($0 as AnyObject).timeIntervalSince1970 > ($1 as AnyObject).timeIntervalSince1970
} as! [Date]
var lastDate = calendar.startOfDay(for: Date())
var i = 0
while i < uniqueDates.count && uniqueDates[i].compare(lastDate) == .orderedSame {
lastDate = (calendar as NSCalendar).date(byAdding: .day, value: -1, to: lastDate, options: [])!
i += 1
}
numberOfConsecutiveDays = i
return i
}
この機能はうまく動作しますが、私は唯一の月曜日の日付にこれを適用します。私はcalendar.componentsを使用してこれを達成しようとしましたが、週末を除いて日付が連続しているかどうかをチェックするときに週末を無視する方法を見つけることができません。
let today = Date()
let calendar = NSCalendar(calendarIdentifier: NSCalendar.Identifier.gregorian)
let components = calendar!.components([.weekday], fromDate: today)
if components.weekday == 2 {
print("Monday")
} else {
print("Monday")
}
FYI - なぜあなたは 'Date'と' NSDate'の両方を使用していますか?なぜあなたは 'NSCalendar'と' Calendar'の両方を使っていますか? Swift 2クラスではなく、Swift 3クラスを使用します。 – rmaddy
あなたは正しいです。私はコードを更新しました。 –
あなたはしましたか?私はまだ多くの 'NSCalendar'を見ています。私は 'NSSet'を見る。私は 'AnyObject'の不要な使い方を見ています。まだSwift 2のコードがたくさんあります。実際にコンパイルされる実際のSwift 3コードを投稿してください。 – rmaddy