我正在编写一个服务类,它将从网络层获取数据并将其传递给 ViewModel。我使用完成处理程序从网络层传递数据。现在我不确定如何将这些数据从网络层传递到我的视图模型。以下是我在服务层的代码:
class HomeService {
func getStates() -> [State]? {
let urlString = baseURL + statesURL
let params = ["user_id": UserDetails.getUserID() as AnyObject]
NetworkOperations.fetchPostResponse(url: urlString, param: params, completionHandler: { (result) in
switch(result) {
case .Success(let res):
guard let response = res as? [String: AnyObject] else {
return
}
if let status = response["status"] as? Bool,
status,
let content = response["content"] as? [[String: AnyObject]] {
let array = content.map({ State(json: $0) })
return array
//error here: Unexpected non-void return value in void function
}
break
case .Failure(_):
break
}
})
//error here: Missing return in a function expected to return '[State]?'
}
}
我已经尝试了以上但出现错误:
<块引用>预期返回“[State]?”的函数中缺少返回值
在我尝试返回数组的处理程序中,我收到以下错误:
<块引用>void 函数中出现意外的非 void 返回值
答案 0 :(得分:0)
您的函数 getStates()
是异步的。它不能返回值。就像 NetworkOperations.fetchPostResponse()
函数采用完成处理程序一样,您的 getStates()
函数需要采用完成处理程序。像这样:
func getStates(completion: StatesCompletion){
//Your code to make the network call goes here
case .Success(let res):
guard let response = res as? [String: AnyObject] else {
let error = MyError(statusInfo
completion(nil, error)
return
}
if let status = response["status"] as? Bool,
status,
let content = response["content"] as? [[String: AnyObject]] {
let array = content.map({ State(json: $0) })
completion(array, nil)
{
}
//...
有关该主题的更多信息,请参阅 this article that I googled。