2017-01-16 4 views
-2

Я знаю, что вы не можете вернуть nil в Swift.
Что я могу использовать вместо этого?Быстро что вернуть вместо нуля?

У меня есть следующий код:

public func getImageFromFilename(name: String) -> UIImage { 
    print(name) 
    var img: UIImage? 
    img = UIImage(named: name + ".jpg") 
    if (img == nil) { 
     img = UIImage(named: name + ".png") 
    } 
    return img! 
} 

Этот код не работает, если файл не существует. Что я могу вернуться, чтобы убедиться, что это было успешно или нет?
Я хочу вернуть изображение, если оно существует, и в противном случае я действительно не знаю, что делать.

+3

Почему не возвращает '' UIImage – Hamish

+0

Но как я могу увидеть, если он был загружен успешно или нет? – hulapalu

+1

Вы можете использовать опциональную привязку. Я бы порекомендовал вам прочитать раздел [Варианты] (https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/TheBasics.html#//apple_ref/doc/uid/TP40014097 -CH5-ID330) руководства по языку - это довольно ключевая концепция в Swift. – Hamish

ответ

3

Существует два варианта. Вы можете либо вернуть UIImage?, где nil, так как возвращенный результат будет указывать на то, что загрузка файла не была успешной, или вы возвращаете UIImage, но при возникновении ошибки при загрузке файла вы получите метод throw.

Вариант с UIImage?

public func getImageFromFilename(name: String) -> UIImage? { 
    print(name) 

    if let img = UIImage(named: name + ".jpg") { 
     return img 
    } 

    if let img = UIImage(named: name + ".png") { 
     return img 
    } 

    return nil 
} 

Вариант с бросанием:

public func getImageFromFilename(name: String) throws -> UIImage { 
    print(name) 

    if let img = UIImage(named: name + ".jpg") { 
     return img 
    } 

    if let img = UIImage(named: name + ".png") { 
     return img 
    } 

    throw YourErrorType.failedToLoadImage(name) 
} 
+0

Хорошо спасибо, я хочу проверить «while loop», если изображение равно нулю, но я получаю «неожиданно найденный nil при разворачивании необязательного значения». Я делаю это так: 'while (img == nil)' – hulapalu

+0

почему вы хотите сделать это во время цикла? – courteouselk

+0

Я делаю это до тех пор, пока изображение не ноль, поэтому я могу отображать его в изображении? – hulapalu