2016-12-22 9 views
0

Посмотрел похожие вопросы и нашел, что в Swift нет ответов, есть много ответов исключительно для форматирования даты, но не в сочетании с итерацией.Как преобразовать массив строк даты в массив объектов даты, Swift

У меня есть массив строк даты, как ниже:

let dateStrings = ["2016-12-22T08:00:00-08:00", "2016-12-22T08:15:00-08:00", "2016-12-22T08:30:00-08:00"] 

Я хотел бы, чтобы преобразовать их в массив локальных dateObjects как ниже

var dateObjects = [2016-12-22 21:30:00 +0530, 2016-12-22 21:45:00 +0530, 2016-12-22 22:00:00 +0530] 

Я попытался перебором массив строк даты, но я получаю эту ошибку:

"fatal error: unexpectedly found nil while unwrapping an Optional value"

Так что я попробовал с дополнительной привязкой w без успеха. Пожалуйста, совет, где я могу ошибиться.

var dateObjects = [Date]() 
let dateFormatter = DateFormatter() 
for date in dateStrings{ 
    dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZZ" 
    let dateObject = dateFormatter.date(from: date) 
    self.dateObjects.append(dateObject!) // ERROR LINE 
} 

Когда я пытаюсь с дополнительным обязательным его будет через другую печать заявления «Невозможно преобразовать даты объекта»

for date in dateStrings{ 
    dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZZ" 
    if let dateObject = dateFormatter.date(from: date){ 
     self.dateObjects.append(dateObject!) // ERROR LINE 
    } 
    else{ 
     print("Unable to convert to date object") 
    } 
} 
+1

эй я побежал ваш код, все работы просто отлично. не ошибка. вы уверены, что это строка, которая вызывает ошибку? –

+0

Интересно, ваш код работает на меня ... –

+0

вам не нужно использовать 'self.dateObjects.append (dateObject!)' Использовать только 'dateObjects.append (dateObject!)' Он будет работать –

ответ

6

Во втором случае вы сила упаковки без дополнительного значения нет необходимости это и вы пишете себя с dateObjects var, который не объявляется как свойство экземпляра, также вы можете просто использовать flatMap, чтобы уменьшить свой код и создать массив из Date из массива String.

let dateFormatter = DateFormatter() 
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ" 
let dateObjects = dateStrings.flatMap { dateFormatter.date(from: $0) } 
1

Попробуйте следующее: объект даты является локальной переменной, поэтому удалите себя. если вы хотите использовать себя, то сделать его глобальным

let dateStrings = ["2016-12-22T08:00:00-08:00", "2016-12-22T08:15:00-08:00", "2016-12-22T08:30:00-08:00"] 

    var dateObjects = [Date]() 
    let dateFormatter = DateFormatter() 
    dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZZ" 

    for date in dateStrings{ 
     let dateObject = dateFormatter.date(from: date) 
     dateObjects.append(dateObject!) 
    } 

    print(dateObjects) 
1

Просто удалить себя из dateObjects.

dateObjects - местная переменная. Поэтому не используйте self с dateObjects.

var dateObjects = [Date]() 
let dateFormatter = DateFormatter() 
for date in dateStrings{ 
    dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZZ" 
    let dateObject = dateFormatter.date(from: date) 
    dateObjects.append(dateObject!) 
} 
0

Попробуйте это ..

Swift 3

let dateStrings = ["2016-12-22T08:00:00-08:00", "2016-12-22T08:15:00-08:00", "2016-12-22T08:30:00-08:00"] 

func convertDate(str: String) -> Date { 
    let dateFormatter = DateFormatter() 
     dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssxxx" 
     let dateObject = dateFormatter.date(from: str) 
    return(dateObject!) 
} 

var stringDates : [Date] = [] 

for date in dateStrings { 
    stringDates.append(convertDate(str: dateStrings[0])) 
} 
+1

Хорошие ответы объясняют, в чем проблема, и хорошие ответы объясняют, как их ответ решает проблему. Кодовые ответы не одобряются здесь. – rmaddy