2017-01-31 1 views
-1

я следующий быстрый 3 код в проекте Xcode 8:неожиданно нашли ноль в то время как разворачивание необязательное значение НЕСМОТРЯ проверки

if pictureImg.image == nil { 
    print("image nil") 
} 

if pictureImg.image != nil { 
    print("image not nil") 
} 

if pictureImg.image != nil { 
    imageData = UIImageJPEGRepresentation(pictureImg.image!, 0.5)! 
} 

Во время выполнения, я в конечном итоге со своеобразным результатом в консоли:

image not nil 
fatal error: unexpectedly found nil while unwrapping an Optional value 

И так кажется, что мой pictureImg.image фактически ноль несмотря на моих предыдущих идентичны если заявление о том, в противном случае. Проверяет, является ли UIImageJPEGRepresentation ноль также приводит к той же ошибки:

if UIImageJPEGRepresentation(pictureImg.img!, 0.5) == nil { *code* } 

подтверждения проблемы, безусловно, делать с pictureImg.image, или так кажется.

Есть ли немедленная/очевидная проблема с этим кодом или будет предоставлена ​​дополнительная информация о проекте?

+1

Вы проверяете, если 'UIImageJPEGRepresentation' возвращает' nil'? Вы принудительно разворачиваете возвращаемое значение. Также вы должны использовать операторы 'if let' вместо проверки на' nil'. – JAL

+0

Никогда, никогда не используйте! Чтобы развернуть дополнительный грех Свифт. Есть так много хороших способов сделать это. Это разбить его с помощью больших вещей. – Fogmeister

+1

@Fogmeister, "необязательный грех Swift"!?! Теперь это смешная опечатка! –

ответ

3

Я полагаю, UIImageJPEGRepresentation(pictureImg.image!, 0.5)! возвращает нуль. Проверьте документацию на яблоко. https://developer.apple.com/reference/uikit/1624115-uiimagejpegrepresentation

ли что-то вроде этого:

if let image = pictureImg.image { 
    if let imageRepresentation = UIImageJPEGRepresentation(image, 0.5) { 
    ... 
    } 
} 

Таким образом, вы не будете иметь никаких проблем.

Или вы можете приковать их @Emptyless предложил

if let image = pictureImg.image, let imageRepresentation = UIImageJPEGRepresentation(image, 0.5) { 
    ... 
} 
+1

Пожалуйста, проголосуйте, чтобы закрыть вопрос как дубликат: [UIImageJPEGRepresentation возвращает nil] (http://stackoverflow.com/questions/29732886/uiimagejpegrepresentation-returns-nil) – JAL

+2

Вы можете связать их в 1, если оператор let. Если вас интересует только эта конкретная комбинация, я думаю, что она выглядит более аккуратной. – Emptyless

+0

Работает как очарование! Извиняюсь за этот вопрос, если он немой, я новичок в этой игре, и я очень благодарен вам, ребята, могут помочь нам идиотам! – Legatro

Смежные вопросы

 Смежные вопросы