UIImage on swift не может проверить нуль
У меня есть следующий код на Swift
var image = UIImage(contentsOfFile: filePath)
if image != nil {
return image
}
Он работал отлично, но теперь на Xcode Beta 6 это возвращает предупреждение
'UIImage' is not a subtype of 'NSString'
Я не знаю, что делать, я пробовал разные вещи, например
if let image = UIImage(contentsOfFile: filePath) {
return image
}
Но ошибка изменится на:
Bound value in a conditional binding must be of Optional type
Это ошибка на Xcode6 beta 6 или я что-то не так?
Ответы
Ответ 1
Обновление
Swift теперь добавила концепцию отказоустойчивых инициализаторов, и теперь UIImage является одним из них. Инициализатор возвращает Необязательный, поэтому, если изображение не может быть создано, оно вернет нуль.
Переменные по умолчанию не могут быть nil
. Вот почему вы получаете ошибку при попытке сравнить image
с nil
. Вам нужно явно указать вашу переменную как optional:
let image: UIImage? = UIImage(contentsOfFile: filePath)
if image != nil {
return image!
}
Ответ 2
func imageIsNullOrNot(imageName : UIImage)-> Bool
{
let size = CGSize(width: 0, height: 0)
if (imageName.size.width == size.width)
{
return false
}
else
{
return true
}
}
Вызов метода выше Как и:
if (imageIsNullOrNot(selectedImage))
{
//image is not null
}
else
{
//image is null
}
здесь, я проверяю размер изображения.
Ответ 3
Инициировать, что вы вызываете init?(contentsOfFile path: String)
, ?
означает, что он возвращает необязательное значение.
Перед тем, как использовать его, вы должны проверить необязательные vars для nil
.
Более короткий, чем принятый ответ и стиль в стиле Swift, чем для Необязательная цепочка:
if let image = UIImage(contentsOfFile: filePath) {
return image
}
Ответ 4
Самый простой способ проверить, имеет ли изображение контент (> ноль):
if image.size.width != 0 { do someting}
Ответ 5
Вы можете проверить это imageAsset как это:
if image.imageAsset != nil
{
// image is not null
}
else
{
//image is null
}