2017-01-16 5 views
-2

Swiftにnilを返すことはできません。
代わりに何を使用できますか?nilの代わりに何を返すのですか?

私は、次のコードを持っている:

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

2つのオプションがあります。 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ループ'をチェックしたいが、オプションの値をアンラッピングしている間に '予期せぬ発見なし 'というエラーが出る。私はこのようにします: 'while(img == nil)' – hulapalu

+0

なぜwhileループでやりたいのですか? – courteouselk

+0

画像がゼロでない限り、私はそれを行うので、画像ビューで表示できますか? – hulapalu

関連する問題