2016-10-12 4 views
5

Я начинаю в iOS. Я искал веб и не мог найти ответ, который бы разрешил мою проблему. Застрял и понятия не имеет, что делать и как искать решение.Swift 3: Невозможно вызвать dataTask с аргументом списка типа ошибки

Я следую руководству, основанному на Swift 2. Следующий метод показывает ошибку.

func downloadBooks(bookTitle: String) { 
    let stringURL = "GET https://www.googleapis.com/books/v1/volumes?q=\(bookTitle)" 

    guard let URL = URL(string: stringURL) else { 
     print("url problems") 
     return 
    } 

    let urlRequest = NSMutableURLRequest(url: URL) 
    let session = URLSession.shared 

    let task = session.dataTask(with: urlRequest) { (data: Data?, response: URLResponse?, error: Error?) in 

    } 

    task.resume() 
} 

Я внедрил все настройки, предложенные Xcode, но никаких дальнейших намеков.

Кроме того, оригинальный часть кода из учебника было так:

guard let URL = NSURL(string: stringURL) else { 
    print("url problems") 
    return 
} 

Затем Xcode предложил добавить as URL, как показано ниже:

let urlRequest = NSMutableURLRequest(url: URL as URL) 

Обе эти версии показывают нет ошибок. Так в чем же разница? Какой из них я должен использовать?

Я бы очень признателен за любую помощь!

+0

Вы дон 't нужно 'GET' в начале URL-адреса. –

+0

@ AndyIbanez действительно? Но это взято из учебника. Тогда автор ошибается? – Marat

+0

Если ваш URL-адрес становится нулевым, то да. По-видимому, задачи данных подразумевают получение. –

ответ

11

В Swift 3 компилятор хочет родной URLRequest

let urlRequest = URLRequest(url: url) // use a lowercase variable name, URL is a native struct in Swift 3 

Но с особым синтаксисом вам не нужно даже запрос

let task = session.dataTask(with: url) { (data: Data?, response: URLResponse?, error: Error?) in ... 

ни аннотаций

let task = session.dataTask(with: url) { (data, response, error) in ... 
+0

Пробовал оба ваших решения, и все они работают. Тогда в чем разница? Какой я должен уйти? – Marat

+1

Запрос действительно не нужен для задач GET. Это необходимо для задач POST, передающих заголовки и данные POST. Поэтому оставьте запрос. – vadian

+0

Теперь я понял. Благодаря! – Marat

Смежные вопросы