索引超出范围将日期转换为字符串组件
Index out of range convert date to string component
我知道这是一个微不足道的错误,但我无法弄清楚,我被卡住了。
我想为 UISegmentedControl(有 6 个段)分配第一个段中的当前日期和下一个段中接下来的 5 天日期,如下图所示。为此,我需要从日期构造一个字符串数组,但我在这一行 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)
}
}
}
而不是 let dayComponent = Calendar.current.component(.day,from: today)
中的 .day
使用 .weekday
,如下所示:
let today = Date()
let dateFormatter = DateFormatter()
let dayComponent = Calendar.current.component(.weekday,from: today)
let dayString = dateFormatter.shortWeekdaySymbols[dayComponent - 1] //Fri
崩溃的原因是 shortWeekdaySymbols[] 只能取 0 到 6 之间的值。
shortWeekdaySymbols[0] = sun
shortWeekdaySymbols[1] = mon
等等。
let stringArray = [String]()
for value in 1 ..< 6 {
let today = Date()
let tomrow = Calendar.current.date(byAdding: .day, value: value, to:today)
let dateFormatter = DateFormatter()
let dayComponent = Calendar.current.component(.weekday,from: tomrow!)
let day = Calendar.current.component(.day, from: tomrow!)
let month = Calendar.current.component(.month, from: tomrow!)
let dayString = dateFormatter.shortWeekdaySymbols[dayComponent - 1]
let monthString = (dateFormatter.shortStandaloneMonthSymbols[month - 1])
let FullDate = String(day) + " " + monthString + " " + dayString
print(FullDate)
}
我知道这是一个微不足道的错误,但我无法弄清楚,我被卡住了。
我想为 UISegmentedControl(有 6 个段)分配第一个段中的当前日期和下一个段中接下来的 5 天日期,如下图所示。为此,我需要从日期构造一个字符串数组,但我在这一行 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)
}
}
}
而不是 let dayComponent = Calendar.current.component(.day,from: today)
中的 .day
使用 .weekday
,如下所示:
let today = Date()
let dateFormatter = DateFormatter()
let dayComponent = Calendar.current.component(.weekday,from: today)
let dayString = dateFormatter.shortWeekdaySymbols[dayComponent - 1] //Fri
崩溃的原因是 shortWeekdaySymbols[] 只能取 0 到 6 之间的值。
shortWeekdaySymbols[0] = sun
shortWeekdaySymbols[1] = mon
等等。
let stringArray = [String]()
for value in 1 ..< 6 {
let today = Date()
let tomrow = Calendar.current.date(byAdding: .day, value: value, to:today)
let dateFormatter = DateFormatter()
let dayComponent = Calendar.current.component(.weekday,from: tomrow!)
let day = Calendar.current.component(.day, from: tomrow!)
let month = Calendar.current.component(.month, from: tomrow!)
let dayString = dateFormatter.shortWeekdaySymbols[dayComponent - 1]
let monthString = (dateFormatter.shortStandaloneMonthSymbols[month - 1])
let FullDate = String(day) + " " + monthString + " " + dayString
print(FullDate)
}