如何安全地解包从Firebase中的数据库调用的可选URL?

hxzsmxv2  于 2023-01-27  发布在  其他
关注(0)|答案(4)|浏览(102)

这是屏幕截图,因为你可以看到它显示错误,因为我强制解开和一些网址是空的:

如何安全地解包此URL,以便不必强制解包?
代码:

func tableView    (_ tableView: UITableView, numberOfRowsInSection 
section: Int) -> Int 
{
        return players.count
    }
func tableView(_ tableView: UITableView, cellForRowAt indexPath: 
IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: 
Reusable.reuseIdForMain) as! CustomCell
        cell.nameLabel.text = players[indexPath.row].name
        cell.otherInfo.text = players[indexPath.row].otherInfo

if let url = players[indexPath.row].imageUrl{
            cell.profileImage.load.request(with: URL(string:url)!)

    }

    return cell
}
jjjwad0x

jjjwad0x1#

在检查字符串之后,您应该检查URL本身的值。这样两个字符串都将安全地展开。

if let urlString = players[indexPath.row].imageUrl,
    let url = URL(string: urlString) {
    cell.profileImage.load.request(with: url)
}
shstlldc

shstlldc2#

你可以试试这个

if let imageUrl = players[indexPath.row].imageUrl as? String{
     let url = URL(string: imageUrl)
     if let url = url {
            cell.profileImage.load.request(with: url)
     }
  }
cu6pst1q

cu6pst1q3#

托马斯·森格尔的方法是最容易和最简单的;不过......
有时我的collectionView中的图像不会加载(失败的if-let的ELSE部分),即使模型下载(从Firebase)的url字符串刚刚好。
原因是某些URL在URL字符串中有空格,Apple方法URL(字符串:)无法正确处理(Apple应该更新它)。要解决这个问题,请找到/编写一个更好的方法来将字符串转换为URL类型,或者将空格替换为%20. literally.““-〉“%20”,然后再替换为URL(string:)不会使防护条件失效。

vkc1a9a2

vkc1a9a24#

使用下面的代码,也将解决您的问题,加载一个图像在纳秒内尝试这个

extension UIImageView {
public func imageFromUrl(urlString: String) {
    if let url = NSURL(string: urlString) {
        let request = NSURLRequest(url: url as URL)
        NSURLConnection.sendAsynchronousRequest(request as URLRequest, queue: OperationQueue.main) { (response: URLResponse?, data: Data?, error: Error?) -> Void in
            if let imageData = data as NSData? {
                self.image = UIImage(data: imageData as Data)
            }
        }
    }
  }
}

用途

if players[indexPath.row].imageUrl != "" && players[indexPath.row].imageUrl != nil {
   cell.profileImage.imageFromUrl(urlString: players[indexPath.row].imageUrl)
}

相关问题