如何在Swift中更快地提出网络请求

时间:2016-03-03 00:29:44

标签: swift http-post xcode7 alamofire

我正在使用Alamofire进行网络请求。当我加载新viewController时,我在ViewDidAppear中发出新请求,以获取图片的示例网址等。当我在ViewDidAppear中发出请求时,数据出现之前有一段延迟,我也试过ViewDidLoad请求速度稍微快一点,但是你可以看到数据在一小段延迟后出现。可以当用户第一次访问viewController时用户将看到数据正在加载,但有没有办法保存数据,以便当用户离开控制器时,例如当用户去从推送navigationController返回,然后再次向前导航而不再请求再次获取数据?

以下是ViewDidAppear中的一项请求。

希望你们能帮忙 - 谢谢

override func viewDidAppear(animated: Bool) {

    navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .Plain, target: nil, action: nil)
    var parameters = [String: AnyObject]()

    if(self.MySelf) {
        parameters = ["userId": LoginViewController.CurrentUser.UserID as AnyObject]
    }
    else {
        parameters = ["userId": self.UserID as AnyObject]
    }


    //GET posts
    Alamofire.request(.POST, Config.ApiURL + "getUserPosts?token=" + LoginViewController.CurrentUser.Token, parameters: parameters as! [String : AnyObject]).responseJSON{ response in
        print(response)

        switch response.result {
        case .Success(let data):
            let json = JSON(data)
            if let posts = json["post"]["data"].array {
                self.postArray = posts
                self.postArray = self.postArray.reverse()

                self.navigationItem.title = json["user"]["firstname"].string! + " " + json["user"]["lastname"].string!

                self.User = json["user"]
                self.UserPic = self.User["photourl"].string!
            }
            else {
                print("Array is empty")
            }

        case .Failure(let error):
            print("Request failed with error: \(error)")
        }

        self.ProfilePostColView?.reloadData()
    }
}

1 个答案:

答案 0 :(得分:1)

尝试在早期的视图控制器中发出网络请求 - 例如加载屏幕,然后将响应传递给此视图控制器。

或者,您可以将响应存储在各种缓存服务中 - 当用户导航回此视图控制器时,您可以在缓存中检查它,如果没有调用请求则将其加载到视图中。

同样在viewDidLoad中调用网络请求会比在viewDidAppear之前调用更快 - 但请记住,viewDidLoad仅针对viewController的特定实例调用一次,其中每次再次显示该实例时都会调用viewDidAppear(例如,如果它作为导航堆栈的底部并且用户按下它的话)。

记住用户 - 你不想咀嚼他们的数据,所以如果你知道请求会有相同的响应你只想做一次http请求。