Получить данные в 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()
}

Вот картинка с ошибкой:

введите здесь описание изображения

Любая идея мне очень поможет! Спасибо.


person Florentin Lupascu    schedule 28.06.2018    source источник
comment
Почему вы без нужды начали использовать NSURL вместо URL?   -  person rmaddy    schedule 28.06.2018
comment
К вашему сведению. Было бы намного лучше создать URL с помощью URLComponents вместо всех этих манипуляций со строками, особенно со строкой запроса.   -  person rmaddy    schedule 28.06.2018
comment
@rmaddy Спасибо, Мэдди. Сейчас я пойду проверить, как это сделать с помощью URLComponents.   -  person Florentin Lupascu    schedule 28.06.2018


Ответы (4)


До Swift 3 существовало неявное соединение между типами Swift и их типами счетчиков в objc, но после Swift 3 оно было удалено, и вам нужно будет явно передавать такой тип, см. здесь для более подробной информации

Так что вы можете сделать это

with: requestURL as URL

Или используйте URL вместо NSURL

person Community    schedule 28.06.2018

Измените NSURL на URL, и я думаю, все будет хорошо:

guard let requestURL = URL(string: "someUrl.com")
    else{
        fatalError("URL can't be found.")
}
person Aaron    schedule 28.06.2018
comment
Я использую NSURL, потому что не могу использовать URL. Когда я открываю скобки после URL, у меня есть только эти 2 варианта: ibb.co/ncFWEo - person Florentin Lupascu; 28.06.2018

В левой части вы отправляете объект URL, а в правой — NSURL

func dataTask(with url: URL) -> URLSessionDataTask

см. здесь, в документах

person Sh_Khan    schedule 28.06.2018

Проблема была в модели JSON, где была структура с именем URL, и из-за этой структуры класс URL из Swift был переопределен. Поэтому будьте осторожны, когда вы конвертируете свою модель JSON в Swift, чтобы дважды проверить имя структур, перечислений и т. д.

person Florentin Lupascu    schedule 28.06.2018