На примере, который вы указали выше, есть немного неправильно, но ради того, чтобы вы двигались в правильном направлении, позвольте мне дать вам несколько советов и быстрое решение вашей проблемы.
Прежде всего, не начинайте переменные с символа верхнего регистра. Это не набор правил в камне или что-то еще, но лучше использовать camelCase, так как это сделает ваш код более понятным и не путает.
Во-вторых, вы делаете много принудительного литья и принудительно разворачиваете необязательные значения, из-за которых ваше приложение подвержено сбоям из-за той же ошибки, которую вы получаете сейчас. Я бы рассмотрел следующие рекомендации: https://stackoverflow.com/a/25195633/4660602
В-третьих, при публикации на SO, пожалуйста, убедитесь, что вы четко задаете свой вопрос, поскольку некоторые пользователи могут поверить, что вы задаете вопрос о том, что такое optionals
и почему вы получаете ошибку fatal error: unexpectedly found nil while unwrapping an Optional value
.
С учетом сказанного, в будущем, пожалуйста, ознакомьтесь с документами SwiftyJSON, поскольку они довольно четко демонстрируют, как использовать библиотеку. Причина, по которой ваш код не работает, заключается в неправильном обращении с JSON. Вот обновленный пример:
let StringUrl = NSURL(string: url) as NSURL!
let Data = NSData(contentsOfURL: StringUrl) as NSData!
let ReadableData = JSON(data: Data)
let chatUsers = ReadableData["chatUsers"].arrayValue
let result = chatUsers[0]["id"].stringValue
или, если вам нужно перебрать все пользователи:
let StringUrl = NSURL(string: url) as NSURL!
let Data = NSData(contentsOfURL: StringUrl) as NSData!
let ReadableData = JSON(data: Data)
for chatUser in ReadableData["chatUsers"]{
print(chatUser.1["id"].stringValue)
}
Пожалуйста, обратите внимание, что я не обновлять переменные идентификаторы правильной конвенции ради не запутанным вы, но вы должны действительно следовать правильному соглашению, как я упоминал в моем первом пункте.
Удачи.
EDIT: Забыл отметить, что ваш JSON некорректно отформатирован. Исправьте данные JSON в правильном формате JSON, чтобы SwiftyJSON мог правильно интерпретировать его. Вы получаете индекс за пределами диапазона, потому что SwiftyJSON НЕ знает chatUsers
- это массив, потому что квадратные скобки заключены в двойные кавычки, когда их не должно быть. Так
"chatUsers":"[
{"id":"5","sender_id":"6","receiver_id":"1","content":"hi","datetime":"2016-11-19 00:00:00"},
{"id":"4","sender_id":"1","receiver_id":"2","content":"hello","datetime":"2016-11-11 00:00:00"},
{"id":"2","sender_id":"1","receiver_id":"3","content":"how are you","datetime":"2016-11-04 00:00:00"}
]"
должен быть
"chatUsers": [
{"id":"5","sender_id":"6","receiver_id":"1","content":"hi","datetime":"2016-11-19 00:00:00"},
{"id":"4","sender_id":"1","receiver_id":"2","content":"hello","datetime":"2016-11-11 00:00:00"},
{"id":"2","sender_id":"1","receiver_id":"3","content":"how are you","datetime":"2016-11-04 00:00:00"}
]
Установить точку останова, отладки шаг за шагом. выяснили, какой из них nil – antonio081014
json format неправильный, почему обратная косая черта добавляется к каждой клавише и значению, нет необходимости добавлять это –
Возможный дубликат [Что делает «фатальная ошибка: неожиданно найденная нуль при разворачивании необязательного значения» означает? ] (HTTP: // StackOverflow.com/questions/32170456/what-do-fatal-error-неожиданно-found-nil-while-unwrapping-an-optional-valu) – rmaddy