4

我正在使用 Alamofire 执行所有网络 API 调用以获取一堆不同的 JSON 文件(取决于用户所在的视图)。

一些 JSON 获取用户配置文件详细信息、一些用户设置、一些用于 tableview 的数据。

我正在使用以下

let postParameters: [String: AnyObject] = ["apiKey":"\(Constants.Variables.apiKey)",
"domain":"\(Constants.Variables.apiDomain)",
"authToken":"\(authToken)",
"password":"\(password)",
"from":"\(from)",
"to":"\(to)"]

Alamofire.request(Router.GetActivities(postParameters))
   .validate(statusCode: 200..<300)
   .validate(contentType: ["application/json"])
   .responseJSON { response in
       if response.result.isSuccess {
          let responseJSON = JSON(response.result.value!)
       }
}

我有一个路由器设置

enum Router: URLRequestConvertible {
  static let baseURLString = "\(Constants.APIPath.URL)"
  static var OAuthToken: String?
  case GetActivities([String: AnyObject])

  var method: Alamofire.Method {
    switch self {
    case .GetActivities:
        return .GET
    }
  }

  var path: String {
    switch self {
      case .GetActivities(_):
        return "/activity.php/get"
    }
  }

  var URLRequest: NSMutableURLRequest {
    let URL = NSURL(string: Router.baseURLString)!
    let mutableURLRequest = NSMutableURLRequest(URL: URL.URLByAppendingPathComponent(path))
    mutableURLRequest.HTTPMethod = method.rawValue

    if let token = Router.OAuthToken {
        mutableURLRequest.setValue("Bearer \(token)", forHTTPHeaderField: "Authorization")
    }

    switch self {
      case .GetActivities(let parameters):
          return Alamofire.ParameterEncoding.URL.encode(mutableURLRequest, parameters: parameters).0
      }
   }
}

每次我加载任何具有 tableview 的视图(比如 view2)时,应用程序都会从​​ API 重新获取数据。tableview 是导航控制器的一部分,转到视图会重新获取数据,但返回视图不会。

例子:

  1. 案例 1:view1 -> view2 = 每次都重新获取 JSON
  2. 案例 2:view2 -> view3 = 加载被点击的表格单元格的详细信息
  3. 案例 3:view3 -> view2 = 不重新获取 JSON
  4. 案例 4:view2 -> view1 = 我猜 view2 不再需要所以它被解雇了

我希望从 view1 -> view2 不需要每次都重新获取数据,如果它在缓存中并且刷新的唯一方法是在用户重新登录到应用程序之后或使用拉取刷新特征。

我是 Swift 开发的新手,因此非常感谢有关如何使用 Alamofire 或 Haneke 缓存 JSON 的任何指导。

Haneke 看起来很有希望,但我不确定如何使用 Alamofires 后置参数来实现它。

非常感谢。

4

0 回答 0