Xcode Playground Tutorial의 비동기 DataTask 요청

이것은 세 가지 간단한 단계로 달성할 수 있습니다.
  • 수입 PlaygroundSupport
  • 전화 PlaygroundPage.current.needsIndefiniteExecution = true
  • 네트워크 요청을 작성하십시오
  • 네트워크 요청 호출 완료 시 PlaygroundPage.current.finishExecution()

  • 이것을 컨텍스트에 적용하기 위해 Github Jobs API를 사용하여 위의 단계를 설명하겠습니다.
  • 1단계: -
    당신의 놀이터에 이 문장을 추가하세요

  • import Foundation
    import PlaygroundSupport
    


  • 2단계:-
    import 문 바로 아래에서 needs Independent Execution을 true로 설정합니다.

  • import Foundation
    import PlaygroundSupport
    
    PlaygroundPage.current.needsIndefiniteExecution = true
    


    지금까지 좋은 진전. 필요에 따라 네트워크 요청을 생성합니다. 자습서에서는 다음과 같이 Github Jobs API 요청을 생성합니다.
  • 먼저 Codable 프로토콜을 구현하는 Struct를 정의하고 응답의 모양을 정의한 다음 네트워크를 호출합니다.

  • 파일은 다음과 같아야 합니다.

    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()
    }
    
    


    이것을 실행하면 디버그 영역에 작업 목록이 표시되어야 합니다.

    좋은 웹페이지 즐겨찾기