【问题标题】:Why does this code give the error Expected ',' separator? [closed]为什么此代码会给出错误 Expected ',' 分隔符? [关闭]
【发布时间】:2016-06-29 21:17:17
【问题描述】:

当迁移到 swift 3 时,为什么这段代码不再工作,并要求它需要一个“,”分隔符?

  import UIKit

    class ProfileButton: UIButton {

        func setProfileImage(address: String?) {
            self.setImage(UIImage(named: "iconProfile"), for: [])
            if let img = address {
                if !img.isEmpty {
                    URLSession.shared().dataTask(URLRequest.with: imgRequest(image: img) as URLRequest, completionHandler: {(data: Data?, response: URLResponse?, error: Error?) in
                        if let imageData = data, image = UIImage(data: imageData) {
                            dispatch_async(dispatch_get_main_queue()) {
                                self.setImage(image.profileImage(), forState: .Normal)
                            }
                        } else if let status = (response as? HTTPURLResponse)?.statusCode {
                            print("image loading status code: \(status)")
                        }
                    }).resume()
                }
            }
        }
    }

【问题讨论】:

  • 错误出现在哪一行?
  • 一个问题是调度调用,它只能作为 Swift 3 中 DispatchXXX 类型的方法使用,所以这可能是 stackoverflow.com/questions/37801370/… 的副本。
  • 如果您要在没有elseif let 中解包它,为什么要使用可选字符串?

标签: ios xcode swift swift3


【解决方案1】:

你有一个.,应该有一个(

URLSession.shared().dataTask(URLRequest.with: //...

应该是:

URLSession.shared().dataTask(URLRequest(with: //...

你有一个轻微的厄运金字塔案例。怎么样?

class ProfileButton: UIButton {

    func setProfileImage(address: String) {
        self.setImage(UIImage(named: "iconProfile"), for: [])

        guard !address.isEmpty else { return }

        let request = URLRequest(with: imgRequest(image: address) as URLRequest){ 
            data, response, error in
            if let imageData = data, image = UIImage(data: imageData) {
                dispatch_async(dispatch_get_main_queue()) {
                    self.setImage(image.profileImage(), forState: .Normal)
                }
            } else if let status = (response as? HTTPURLResponse)?.statusCode {
                print("image loading status code: \(status)")
            }
        }

        URLSession.shared().dataTask(request).resume()
    }
}

【讨论】:

  • 第一次听到厄运金字塔这个词@AMomchilov,我的代码又出现了一个错误,所以我猜这就是你的意思。我是 swift 3 URLRequest 结构的完全菜鸟,我不知道为什么这个错误会从名为 request 的变量中显示出来。
  • 它的说法是 imgRequest 是一个未解析的标识符
  • 我在代码中保留了相同的imgRequest。我不知道它是什么。 “末日金字塔”是当您开始将许多块相互嵌套时形成的三角形。这通常表明设计不佳。在这种情况下,我转换了您的一些 if 语句,并将它们分解成更简单的部分
猜你喜欢
  • 2021-07-30
  • 1970-01-01
  • 2013-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-04
相关资源
最近更新 更多