Twitterみたいなタイムラインを作ろうとしていて、データベース上のusericonのurlを表示しようとしたのですが、そのurlがnullだったり、urlが画像urlじゃなかった場合、どうやったらいいか調べて実際にテストしてみたので、備忘録として記録します。

結論

if let でURLがnullかどうかの確認、
do catchで、data変換とUIImageへの変換を実行

上記2つでNGだった場合にアセットを読み込んだUIImageに置き換える

実際に作ってテストしてみたのがこのコード

    func UserIconStrToUIImage(UrlStr:String?) -> UIImage{
        
        var iconresult:UIImage
        
        if
            let urlstr = UrlStr
        {
            let url = URL(string: urlstr)
            do{
                let data = try Data(contentsOf:url!)
                iconresult = UIImage(data:data)!.withRenderingMode(.alwaysOriginal)
            }catch{
                iconresult = UIImage(named:"defaultUserIcon")!
            }
        }else{
            iconresult = UIImage(named:"defaultUserIcon")!
        }
        return iconresult
    }

引数は、データベースがnullだったりする可能性があるので?をつけてnilを許容するオプショナル型にしました。

最初のifでnilかどうかの分岐、doの中で、ちゃんとデータとして取得してUIImageになるのか分岐してます。

NGが出たら全部無条件で、アセットに登録しているdefaultUserIconでUIImageを生成しています。

コメント