全局函数返回解析的JSON?

时间:2018-03-25 06:08:33

标签: json swift xcode

我试图在整个应用程序中访问此方法,因为有许多视图控制器需要JSON响应,具体取决于路径和语言参数,但我不确定要使用哪种模式或如何使用构建应用程序。

{{1}}

1 个答案:

答案 0 :(得分:1)

你可以选择单音设计模式。

另外请记住,当函数返回时,您无法返回URLRequest响应。这是一个异步任务,在主线程中不起作用。所以回归是行不通的。

你需要利用封闭---->完成块将更合适。

class WebService {

   static let shared = WebService()

   func fetchJsonFor(path: String, langugae: String,completion:((Any?) -> Void)){
      var components = URLComponents()
      components.scheme = Constants.APIScheme
      components.host = Constants.APIHost
      components.path = Constants.APIPath
      components.path.append(path)
      components.path.append(langugae)

      let request = URLRequest(url: components.url!)
      var parsedJSON: AnyObject!
      let task = URLSession.shared.dataTask(with: request) { (data, response, error) in
        if error != nil{
            print(error?.localizedDescription ?? "Error")
            completion(nil)
        }
        guard let data = data else{
            completion(nil)
        }
        do{
            parsedJSON =  try JSONSerialization.jsonObject(with: data, options: .allowFragments)
            completion(parsedJSON)
        } catch{
            print("Can't parse JSON: \(data)")
            completion(nil)
        }
    }
    task.resume()
   }
}

如何使用.. 从ViewController类中,您可以调用类似

的Web服务
    WebService.shared.fetchJsonFor(path: "YOUR_PATH", langugae: "YOUR_LANGUAGE") { (response) in
        if let response = response{
            // Success response
        }else{
            //Failed response
        }
    }