iOS URLSession 的基础用法(善用 guard 语法)

1,448 阅读1分钟

GET 请求

func makeMyGetCall(_ urlStr: String) {
   // urlRequest
   guard let url = URL(string: urlStr) else {
       print("Error: cannot convert urlStr to url")
       return
   }
   let urlRequest = URLRequest(url: url)

   // session
   let session = URLSession.shared

   // task
   let task = session.dataTask(with: urlRequest) { (data, response, error) in
       // check for error
       guard error == nil else {
           print("Error: error is not nil")
           return
       }
       // check for data
       guard let responseData = data else {
           print("Error: data is nil")
           return
       }
       // convert data to dict
       do {
           guard let responseDict = try JSONSerialization.jsonObject(with: responseData, options: []) as? [String: Any] else {
               print("Error: cannot convert data to dict")
               return
           }
           print(responseDict.description)
       } catch {
           print("Error: cannot convert data to dict")
           return
       }
   }
   task.resume()
   
}

POST 请求

func makeMyPostCall(_ urlStr: String, _ parameter: [String: Any]) {

  // urlRequest
  guard let url = URL(string: urlStr) else {
      print("Error: cannot convert urlStr to url")
      return
  }
  var urlRequest = URLRequest(url: url)
  urlRequest.httpMethod = "POST"
  do {
      let parameterData = try JSONSerialization.data(withJSONObject: parameter, options: [])
      urlRequest.httpBody = parameterData
  } catch {
      print("Error: cannot convert parameter to parameterData")
      return
  }

  // session
  let session = URLSession.shared

  // task
  let task = session.dataTask(with: urlRequest) { (data, response, error) in
      // check for error
      guard error == nil else {
          print("Error: error is not nil")
          return
      }
      // check for data
      guard let responseData = data else {
          print("Error: responseData is nil")
          return
      }
      // convert data to dict
      do {
          guard let responseDict = try JSONSerialization.jsonObject(with: responseData, options: []) as? [String: Any] else {
              print("Error: cannot convert responseData to responseDict")
              return
          }
          print(responseDict.description)
      } catch {
          print("Error: cannot convert responseData to responseDict --")
          return
      }
  }
  task.resume()
  
}

Thank cmoulton for her help