I know this is a trivial error, but I can't figure it out and I am stuck.
I want to assign to a UISegmentedControl (having 6 segments) the current date in the first segment and the following 5 days dates in the next segments as in the picture below. To do this, I need to construct an array of string from date, but I get index out of range on this line let dayString = dateFormatter.shortWeekdaySymbols[dayComponent-1]
var stringDates = [String]()
override func viewDidLoad() {
super.viewDidLoad()
//for each segment, construct a string date with the currentDate() being first
for i in 1...6 {
let dateFormatter = DateFormatter()
let today = Date()
let calendar = Calendar.current
if i == 1 {
let dayComponent = Calendar.current.component(.day,from: today)
let dayString = dateFormatter.shortWeekdaySymbols[dayComponent-1]
let month = Calendar.current.component(.month, from: today)
let monthSymbol = dateFormatter.shortMonthSymbols[month-1]
let dayMonthString = dayString + monthSymbol
stringDates.append(dayMonthString)
} else {
var components = DateComponents()
components.weekday = i
let nextDay = calendar.date(byAdding: components, to: today)
let dayComponent = Calendar.current.component(.day,from: nextDay!)
let dayString = dateFormatter.shortWeekdaySymbols[dayComponent-1]
let month = Calendar.current.component(.month, from: nextDay!)
let monthSymbol = dateFormatter.shortMonthSymbols[month-1]
let dayMonthString = dayString + monthSymbol
stringDates.append(dayMonthString)
}
}
}
Instead of .day
in let dayComponent = Calendar.current.component(.day,from: today)
use .weekday
as shown below:
let today = Date()
let dateFormatter = DateFormatter()
let dayComponent = Calendar.current.component(.weekday,from: today)
let dayString = dateFormatter.shortWeekdaySymbols[dayComponent - 1] //Fri