在 iOS 12 中获取数据

Fetch data in iOS 12

当我尝试使用 Xcode 10 Beta 和 Swift 4.2.

获取数据时出现错误

在 swift 4.1 中,我的方法运行得很完美,但现在我遇到了一个错误,我无法在互联网上找到修复它的解决方案。

这是我的代码:

// Download photos from Google for products avatar
func fetchPhotosForProductsFromGoogle(){

    guard let requestURL = NSURL(string: URL.googleAPI + "q=\(query ?? "flagUK")" + URL.searchPhotosOnly + URL.googleSearchEngineID + URL.googleAPIKey)
        else{
            fatalError("URL can't be found.")
    }

    URLSession.shared.dataTask(with: requestURL) { (data, response, error) in

        guard error == nil else {
            print(error?.localizedDescription ?? "Error URL Session.")
            return
        }
        do {

            let googlePhotosList = try JSONDecoder().decode(GoogleSearchModel.self, from: data!)

        } catch {
            print(error.localizedDescription)
        }
        DispatchQueue.main.async {

            self.productsTableView.reloadData()
        }

        }.resume()
}

这是一张有错误的图片:

任何想法都会对我有很大帮助!谢谢

NSURL 更改为 URL,我认为你应该可以开始了:

guard let requestURL = URL(string: "someUrl.com")
    else{
        fatalError("URL can't be found.")
}

在左侧,您发送 URL 对象,但在右侧,它是 NSURL

func dataTask(with url: URL) -> URLSessionDataTask

Docs

中查看此处

在 swift 3 之前,swift 类型和它们在 objc 中的计数器类型之间存在隐式桥接,但在 swift 3 之后,它被删除,你必须在传递时明确说明这种类型,参考here了解更多详情

所以你可以这样做

with: requestURL as URL

或使用URL代替NSURL

问题出在 JSON 模型中,其中有一个名为 URL 的结构,由于该结构,Swift 中的 URL class 被覆盖.因此,当您将 JSON 模型转换为 Swift 时要小心,以检查结构、枚举等名称的 2 倍