Другие answe rs говорят вам разворачивать факультативный вариант, но на самом деле проблема в том, что вы force -объем дополнительного с !
, несмотря на то, что он nil
.
Когда вы пишете something!
, вы говорите, что «something
может быть nil
, но если это так, я хочу, чтобы моя программа вылетала».
Причина, по которой может возникнуть звонок nil
, если результат недействителен - например, если вы попытаетесь извлечь ключ из словаря, которого там нет, или что URL-адрес не указывает на допустимый загружаемый файл образ.
Вы можете комбинировать проверку для nil
с оператором if
, который разворачивает опцию и возвращает необязательное значение, пока значение не было nil
. Вы можете также приковать их вместе, так что если вам нужно разворачивать значение, а затем передать его в вызов, который также возвращает необязательный, вы можете сделать все это в одном if
заявления:
if let httpUrl = subJson["image_url"].string,
url = NSURL(string: httpUrl),
data = NSData(contentsOfURL: url),
image = UIImage(data: data)
{
// use image value
}
else {
// log some error
}
Примечания, на первом line, вызов равен .string
, а не .stringValue
- .string
также возвращает необязательный номер с nil
, если его значение отсутствует.
Конечно, объединение всех этих разворот вместе означает, что вы не можете сообщить , что не удалось, поэтому вы можете разбить их на отдельные заявления.
Это основная особенность языка Swift. Вам нужно серьезно загрузить книги Swift из книжного магазина Apple и прочитать их. Когда вы пишете URL! это означает, что «пожалуйста, сбой, если URL-адрес равен нулю». – gnasher729