#swift #calendar #nsdatecomponents
#swift #Календарь #nsdatecomponents
Вопрос:
Я создал приложение погоды и для него использовал API. (Я использовал OpenWeatherMap и API как «Вызов данных прогноза на 5 дней / 3 часа») Я получил всю необходимую мне информацию.
Затем я получил данные за все дни недели. Например, температура в понедельник 22 градуса, температура во вторник 12 градусов и т. Д.
Я могу получить текущий день недели и добавить его в словарь.
Но я не могу получить новое имя дня (день недели). Что мне нужно сделать? Мне нужна помощь в получении названий следующих дней недели и их индексов. А затем добавьте значение ключа в словарь.
// Indexed all days of the week Sun, Mon, Wed and a t.c
let setWeekDay = IndexSet([1, 2, 3, 4, 5, 6, 7])
//I detected current day of the weak and added to dictionary
var weakDay = [String:Int]()
let calendar = Calendar.current
var weekday = calendar.component(.weekday, from: Date())
let components = DateComponents(weekday: weekday)
var dayName = calendar.nextDate(after: Date(), matching: components, matchingPolicy: .nextTime)?.Days()
weakDay = [dayName!:weekday]
if let nextWeekday = setWeekDay.integerGreaterThan(weekday) {
weekday = nextWeekday
} else {
weekday = setWeekDay.first!
}
...
// I extended date formatter
extension Date{
func Days() -> String{
let dataFormatter = DateFormatter()
dataFormatter.dateStyle = .short
dataFormatter.dateFormat = "EEEE"
return dataFormatter.string(from: self)
}
}
//This is dictionary will be change key and value dynamically.
//I need got dictionary as:
let weakDay = [
"Sunday": 1,
"Monday": 2,
"Tuesday": 3,
"Wednesday": 4,
"Thursday": 5,
"Friday": 6,
"Saturday": 7,
]
Комментарии:
1. Ваш вопрос неясен. Пожалуйста, лучше объясните, в чем вам нужна помощь.
2. Кстати — не вводите жестко названия и номера дней недели.
Calendar
Класс предоставляет вам названия дней недели.3. Привет и извините за плохой английский! Мне нужна помощь в получении названий следующих дней недели и их индексов. А затем добавьте значение ключа в словарь.
4. Надеюсь, я мог бы более четко объяснить проблему)
Ответ №1:
Спасибо всем за помощь, но я сам нашел ответ на свой вопрос! Что мне нужно было сделать:
if let cell = tableView.dequeueReusableCell(withIdentifier: "daysId", for: indexPath) as? DaysTVCell {
var nameWeakAndIndex = [String:Int]()
var dateComponents = DateComponents()
dateComponents.setValue(1, for: .day);
var now = Date()
for index in 0...5 {
let tomorrow = Calendar.current.date(byAdding: dateComponents, to: now)
let detectDayIndex = index
nameWeakAndIndex = [now.Days():detectDayIndex]
now = tomorrow!
daysWeak.sort(by: { (nameWeakAndIndex[$0.dayOfTheWeak] ?? 6) > (nameWeakAndIndex[$1.dayOfTheWeak] ?? 6) })
}
let day = daysWeak[indexPath.row]
cell.configureCell(daysForecast: day)
return cell