Arhn - архитектура программирования

Почему этот пример Apple в Swift у меня не работает?

Я слежу за этой публикацией Swift (опубликованной Apple в сентябре 2016 г.).

Сообщение реализует следующее расширение, как показано ниже:

extension Restaurant {
    private let urlComponents: URLComponents // base URL components of the web service
    private let session: URLSession // shared session for interacting with the web service

    static func restaurants(matching query: String, completion: ([Restaurant]) -> Void) {
        var searchURLComponents = urlComponents
        searchURLComponents.path = "/search"
        searchURLComponents.queryItems = [URLQueryItem(name: "q", value: query)]
        let searchURL = searchURLComponents.url!

        session.dataTask(url: searchURL, completion: { (_, _, data, _)
            var restaurants: [Restaurant] = []

            if let data = data,
                let json = try? JSONSerialization.jsonObject(with: data, options: []) as? [String: Any] {
                for case let result in json["results"] {
                    if let restaurant = Restaurant(json: result) {
                        restaurants.append(restaurant)
                    }
                }
            }

            completion(restaurants)
        }).resume()
    }
}

Когда я пытаюсь воссоздать это в своем собственном проекте, я получаю следующее сообщение:

Невозможно вызвать «dataTask» со списком аргументов типа «(с: String, completeHandler: () -> ())»

Почему есть несоответствие между сообщением и тем, что мне говорит XCode 8.1? Они оба были выпущены в одно и то же время.

Я использую Swift 3.0


  • Это несовместимо со Swift3 (свойства в расширении, ++). 24.11.2016

Ответы:


1

Вам не хватает ключевого слова in, должно быть.

Редактировать: Как заметил @leo, ваш список аргументов был неверным, измените его с:
(_, _, data, _) на (data, response, error)

Так вот что должно быть:

session.dataTask(url: searchURL, completion: { (data, response, error) in

Обратите внимание на in в конце строки. Это синтаксис для замыканий, принимающих аргументы .

24.11.2016
  • @LeoDabus хороший улов! Разве не то, что тоже может быть не так, просто увидел пропажу в 24.11.2016
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..