如何修复条件绑定的初始化程序必须具有可选类型,而不是“字符串”? [复制]

Posted

技术标签:

【中文标题】如何修复条件绑定的初始化程序必须具有可选类型,而不是“字符串”? [复制]【英文标题】:How to fix Initializer for conditional binding must have Optional type, not 'String'? [duplicate] 【发布时间】:2019-03-29 14:28:24 【问题描述】:

我该如何解决这个问题? 条件绑定的初始化程序必须具有 Optional 类型,而不是 'String'

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! TableViewCell

    cell.lblNamnEfternamn.text = personsArray[indexPath.row].wholeName
    cell.lblEmail.text = personsArray[indexPath.row].email
    cell.imageAvatar.image = UIImage(named: "avatar")

    if let newProfileImageUrl = personsArray[indexPath.row].profileImageUrl 
        let url = NSURL(string: newProfileImageUrl)
        let request = URLRequest(url: url! as URL)
        let task = URLSession.shared.dataTask(with: request as URLRequest)  (data, response, error) in
            if error != nil 
                print(error!)
                return
            

            DispatchQueue.main.async 
                cell.imageAvatar.image = UIImage(data: data!)
                tableView.reloadData()
            

        
    
    return cell

【问题讨论】:

在您当前的方法中,您可能还需要task.resume() 你只能使用 if let 来解开一个可选项。该错误表明 profileImageUrl 不是可选的。所以你不必使用 if let。 您可以将 profileImageUrl 声明为字符串吗?而不是字符串。 【参考方案1】:

替换这个

if let newProfileImageUrl = personsArray[indexPath.row].profileImageUrl 

let newProfileImageUrl = personsArray[indexPath.row].profileImageUrl 

另外最好使用SDWebImage

cell.imageAvatar.sd_setImage(with: URL(string:newProfileImageUrl), placeholderImage: UIImage(named: "placeholder.png"))

而不是每次滚动都重复获取图像

【讨论】:

没有帮助显示更多错误 去掉if let的结尾

以上是关于如何修复条件绑定的初始化程序必须具有可选类型,而不是“字符串”? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

快速获取条件绑定的错误初始化程序必须具有可选类型,为啥?

条件绑定:if let error - 条件绑定的初始化程序必须具有可选类型

条件绑定:if let error - 条件绑定的初始化程序必须具有可选类型

ios:条件绑定的初始化程序必须具有可选类型,而不是“LOTAnimationView”

条件绑定的初始化程序必须具有可选类型,而不是 '[NSObject: AnyObject]' SwiftyJSON [重复]

条件绑定的初始化程序必须具有可选类型,而不是“UIView”