Быстрая проверка на наличие нулевого файла - неожиданно найденный ноль - PullRequest
0 голосов
/ 13 июня 2018

Я пытаюсь использовать оператор защиты, чтобы проверить, доступен ли этот файл.

guard UIImage(contentsOfFile: Bundle.main.path(forResource: imageName, ofType: "png")!) != nil else {
    print("\(imageName).png file not available")
    return
}

Но я получаю сбой на линии защиты с:

Неустранимая ошибка: неожиданно обнаружен ноль при развертывании Необязательное значение

imageName не является обязательным.Это строка со значением.

nil - это именно то, что я пытаюсь проверить, так почему происходит сбой оператора guard?

1 Ответ

0 голосов
/ 13 июня 2018

Сочетание guard и принудительное развертывание - оксюморон.Одним из распространенных вариантов использования guard является guard let, который надежно защищает от nil и устраняет необходимость принудительного развертывания.

Я бы переделал ваш код в что-то вроде:

guard let imagePath = Bundle.main.path(forResource: imageName, ofType: "png"), let image = UIImage(contentsOfFile: imagePath) else {
    print("\(imageName).png file not available")
    return
}

// Use image here as needed

Если вам на самом деле не нужно изображение, но вы просто хотите убедиться, что изображение может быть создано, вы можете изменить его на:

guard let imagePath = Bundle.main.path(forResource: imageName, ofType: "png"), UIImage(contentsOfFile: imagePath) != nil else {
    print("\(imageName).png file not available")
    return
}

Сказав все это, если изображениена самом деле предполагается, что он находится в вашем комплекте приложений, и это просто временная проблема, такая как забывание правильно нацелить файл, затем не использовать guard и идти вперед и принудительно разворачивать.Вы хотите, чтобы приложение рухнуло на ранней стадии разработки, чтобы вы могли решить проблему.

let image = UIImage(contentsOfFile: Bundle.main.path(forResource: imageName, ofType: "png")!)!

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

let image = UIImage(named: imageName)!
...