2017-12-09 4 views
0

JSONデータを取得して補完ブロックに表示するこの関数は、(Data)ではなく((Data) -> Void)の代わりにvoidが本当に必要ですか?ここでは関数は次のとおりです。JSONデータを取得する際に、完了ブロックを持つポイントは何ですか?

typealias JSONData = ((Data) -> Void) 


    func getJSONData(type: String, urlExtension: String, completion: @escaping JSONData) { 

    let request = URLRequest(url: URL(string:"\(baseURL)\(type)/\(urlExtension)?api_key=\(apiKey)&region=US&append_to_response=videos,images,releases")!) 


    let dataTask = session.dataTask(with: request, completionHandler: { (data, response, error) in 

     if error == nil { 
     if let httpResponse = response as? HTTPURLResponse { 
      switch (httpResponse.statusCode) { 
      case 200: 
      if let data = data { 
       completion(data) 
      } 
      default: 
      print(httpResponse.statusCode) 
      } 
     } 
     } else { 

     DispatchQueue.main.async { 

      if let error = error { 
      print("Error: \(error.localizedDescription)") } 
      return 
     } 
     } 
    }) 
    dataTask.resume() 
    } 

答えて

1

スウィフト構文は、->後に戻り値の型と閉鎖を宣言しなければならないことを指示します。

次の2つのオプションがあります。

  1. typealias JSONData = (Data) -> Void
  2. typealias JSONData = (Data) ->()

私はAppleが最も頻繁に#1を使用して参照します。

+0

- > allを一緒に省略することは可能ですか、それとも必須ですか? – SwiftyJD

+0

これは必須です。詳細についてはhttps://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Closures.htmlをご覧ください。 – hhanesand

+0

ああ、ありがとう! – SwiftyJD

関連する問題