Простой сетевой запрос с Swift 4 - PullRequest
0 голосов
/ 14 января 2019

В настоящее время я изучаю swift из опыта веб-разработки, и я немного застрял, делая простой сетевой запрос.

Я использую документ ниже, чтобы узнать о URLSession и dataTask, но у меня, похоже, есть концептуальное недопонимание того, как документация использует with. (Любое объяснение там будет оценено)

https://developer.apple.com/documentation/foundation/urlsession/1410330-datatask

Вот мой код:

import Foundation

let url = URL(string: "https://swapi.co/api/people/1/")
let urlSession = URLSession.shared


func completionHandler (_ data : Data?, _ response : URLResponse?, _ error : Error?) -> Void {
    print("Completed.")
}

urlSession.dataTask(with url : url, completionHandler : completionHandler)

Ошибка:

Playground execution failed:

error: MyPlayground.playground:5:26: error: expected ',' separator
urlSession.dataTask(with url : url, completionHandler : completionHandler)
                         ^
                        ,

версия Xcode 9.2

Swift версия 4.0.3 (swiftlang-900.0.74.1 clang-900.0.39.2)

1 Ответ

0 голосов
/ 14 января 2019

попробуй

urlSession.dataTask(with: url!, completionHandler: completionHandler)

обратите внимание, что вы принудительно распаковываете URL здесь. лучше использовать guard let или if let, чтобы избежать этого.

if let url = URL(string: "https://swapi.co/api/people/1/") {
    let urlSession = URLSession.shared

    let completionHandler: (_ data: Data?, _ response: URLResponse?, _ error: Error?) -> Void  = { _,_,_ in
        print("Completed.")
    }

    let task = urlSession.dataTask(with: url, completionHandler: completionHandler)
    task.resume()
}

На игровых площадках также необходимо активировать неопределенное выполнение

import PlaygroundSupport

import Foundation

if let url = URL(string: "https://swapi.co/api/people/1/") {
    let urlSession = URLSession.shared

    let completionHandler: (_ data: Data?, _ response: URLResponse?, _ error: Error?) -> Void  = { _,_,_ in
        print("Completed.")
    }

    let task = urlSession.dataTask(with: url, completionHandler: completionHandler)
    task.resume()
}

PlaygroundPage.current.needsIndefiniteExecution = true
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...