2016-11-01 21 views
1

私はiOSとプログラミングの新機能です。今月初めの日から今日まで配列を取得する必要があります。そして、今日まで3ヶ月間の1つの配列が、私はそれを行う方法はありません、任意のヘルプやアイデアをお願いしますか?月曜日から今日までの配列を取得Swift

私は月の最初の日を取得するには、このことについて確認:

extension Date { 
func startOfMonth() -> Date? { 
    let comp: DateComponents = Calendar.current.dateComponents([.year, .month, .hour], from: Calendar.current.startOfDay(for: self)) 
    return Calendar.current.date(from: comp)! 
} 

が、私のプロジェクトの他の部分であることを行うならば、それは何をすべきか、のViewControllerでのみ動作しますか?そしてまた、私は

...

EDITを初日と今日の間のすべての日を取得するために、配列を反復処理する方法見当がつかない私はこのような何かを作ったが、それはミリアンペアに無限ループを提供します。..私は何を間違えているのですか?

func weatherDatesFromCurrentDayMonth() -> [Any] { 
    var date = Date() 
    let currentCalendar = Calendar.current 
    var dateComponents = DateComponents() 
    dateComponents.month = -1 
    // dateComponents.day = 1 
    let endingDate = Calendar.current.date(byAdding: dateComponents, to: date) 
    print("\(endingDate!)") 
     var datesArray = Array<Any>() 

    while date.compare(endingDate!) != ComparisonResult.orderedAscending 
    { 
     var dateComponents = DateComponents() 
     dateComponents.day = 1 
     date = Calendar.current.date(byAdding: dateComponents, to: date)! 
     datesArray.append(date) 
     print("\(datesArray)") 
    } 

    return [datesArray] 

} 

答えて

1

始まるあなたのendingDateで1ヶ月前にすでにあるとdateが今あるので、あなたは無限ループを抱えています。

func weatherDatesFromCurrentDayMonth() -> [Date] { 
    let now = Date() 
    var currentDate = previousMonth(date: now) 
    var datesArray = [Date]() 

    while currentDate < now { 
     datesArray.append(currentDate) 
     currentDate = nextDay(date:currentDate) 
    } 
    print("result: \(datesArray)") 
    return datesArray 
} 

func nextDay(date: Date) -> Date { 
    var dateComponents = DateComponents() 
    dateComponents.day = 1 
    return Calendar.current.date(byAdding: dateComponents, to: date)! 
} 

func previousMonth(date: Date) -> Date { 
    var dateComponents = DateComponents() 
    dateComponents.month = -1 
    return Calendar.current.date(byAdding: dateComponents, to: date)! 
} 
:あなただけ dateをインクリメントループ内ので true

このコードを試してみてください、それは常にendingDate後になることはありませんので、あなたの状態は常にあります

関連する問題