
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を生成しています。