Xcode Playground Tutorial의 비동기 DataTask 요청
17260 단어 xcodeurlsessioniosswift
PlaygroundSupport
PlaygroundPage.current.needsIndefiniteExecution = true
PlaygroundPage.current.finishExecution()
이것을 컨텍스트에 적용하기 위해 Github Jobs API를 사용하여 위의 단계를 설명하겠습니다.
당신의 놀이터에 이 문장을 추가하세요
import Foundation
import PlaygroundSupport
import 문 바로 아래에서 needs Independent Execution을 true로 설정합니다.
import Foundation
import PlaygroundSupport
PlaygroundPage.current.needsIndefiniteExecution = true
지금까지 좋은 진전. 필요에 따라 네트워크 요청을 생성합니다. 자습서에서는 다음과 같이 Github Jobs API 요청을 생성합니다.
파일은 다음과 같아야 합니다.
import Foundation
import PlaygroundSupport
PlaygroundPage.current.needsIndefiniteExecution = true
struct GithubJob: Codable {
var company: String?
var company_logo: String?
var company_url: String?
var description: String?
var id: String?
var location: String?
var title: String?
var url: String?
}
func fetchGithubJobs(completionHandler: @escaping(Result<[GithubJob],Error>) -> Void) {
//create an instance of the jsonDecoder
let jsonDecoder = JSONDecoder()
//create a dataTask
let session = URLSession(configuration: .default, delegate: nil, delegateQueue: .main)
let endpoint = "https://jobs.github.com/positions.json?description=api"
//create a url from the endpoint
guard let endpointURL = URL(string: endpoint) else {
return
}
//create a request
var request = URLRequest(url: endpointURL)
request.httpMethod = "GET"
//create the dataTask
let dataTask = session.dataTask(with: request) { (data, _, error) in
//check if error is nil
guard error == nil else {
completionHandler(.failure(error!))
return
}
//check if we already have data
guard let jsonData = data else {
return
}
//try to decode the response
do {
let githubJobs = try jsonDecoder.decode([GithubJob].self, from: jsonData)
print("Jobs are \(githubJobs)")
completionHandler(.success(githubJobs))
} catch {
print("Something Went wrong")
completionHandler(.failure(error))
}
}
dataTask.resume()
}
마지막 단계는 함수를 호출한 다음 함수가 호출 실행을 마치면
PlaygroundPage.current.finishExecution()
이 마지막 단계를 추가하면 파일이 아래 코드 조각과 같아야 합니다.
import Foundation
import PlaygroundSupport
PlaygroundPage.current.needsIndefiniteExecution = true
struct GithubJob: Codable {
var company: String?
var company_logo: String?
var company_url: String?
var description: String?
var id: String?
var location: String?
var title: String?
var url: String?
}
func fetchGithubJobs(completionHandler: @escaping(Result<[GithubJob],Error>) -> Void) {
//create an instance of the jsonDecoder
let jsonDecoder = JSONDecoder()
//create a dataTask
let session = URLSession(configuration: .default, delegate: nil, delegateQueue: .main)
let endpoint = "https://jobs.github.com/positions.json?description=api"
//create a url from the endpoint
guard let endpointURL = URL(string: endpoint) else {
return
}
//create a request
var request = URLRequest(url: endpointURL)
request.httpMethod = "GET"
//create the dataTask
let dataTask = session.dataTask(with: request) { (data, _, error) in
//check if error is nil
guard error == nil else {
completionHandler(.failure(error!))
return
}
//check if we already have data
guard let jsonData = data else {
return
}
//try to decode the response
do {
let githubJobs = try jsonDecoder.decode([GithubJob].self, from: jsonData)
print("Jobs are \(githubJobs)")
completionHandler(.success(githubJobs))
} catch {
print("Something Went wrong")
completionHandler(.failure(error))
}
}
dataTask.resume()
}
fetchGithubJobs { result in
switch result {
case .success(let jobs):
print("Jobs are \(jobs)")
default:
print("Something Went Wrong")
}
PlaygroundPage.current.finishExecution()
}
이것을 실행하면 디버그 영역에 작업 목록이 표시되어야 합니다.
Reference
이 문제에 관하여(Xcode Playground Tutorial의 비동기 DataTask 요청), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/devagani/asynchronous-datatask-request-in-xcode-playground-tutorial-23j8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)