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