【问题标题】:Create a Class that Makes HTTPRequest in Swift在 Swift 中创建一个发出 HTTPRequest 的类
【发布时间】:2015-02-04 06:46:36
【问题描述】:

我正在制作一个需要在其许多 ViewController 中发出 HTTP 请求的应用。

我最终将这些代码复制并粘贴到每个 ViewController 中,并监听 NSURLConnectionDelegate 和 NSURLConnectionDataDelegate 的委托回调

func makeRequest()
{
        //Base64
        var username = "testUsername";
        var password = "testPassword";
        var loginString = NSString(format: "%@:%@", username, password);
        var loginData: NSData = loginString.dataUsingEncoding(NSUTF8StringEncoding)!;
        var base64LoginString = loginData.base64EncodedStringWithOptions(nil);

        var url: NSURL = NSURL(string: self.HTTP_REQUEST_STRING)!;
        var urlRequest: NSMutableURLRequest = NSMutableURLRequest(URL: url);
        urlRequest.setValue("Basic \(base64LoginString)", forHTTPHeaderField: "Authorization");
        urlRequest.HTTPMethod = "POST";
        urlConnection = NSURLConnection(request: urlRequest, delegate: self)!;

}

func connection(connection: NSURLConnection!, didReceiveData data: NSData!)
{
    self.resultData.appendData(data);
}

func connectionDidFinishLoading(connection: NSURLConnection!)
{
    //Do Something
}

func connection(connection: NSURLConnection, didFailWithError error: NSError)
{
    //Do Something
}

我想知道是否有比这更好的方法,而不是将代码复制并粘贴到每个 ViewController 中?

是否可以将这些代码放入一个类中?但是,我们如何知道连接是否已完成加载?

很抱歉这个问题,我缺乏良好的面向对象设计的知识。

谢谢

【问题讨论】:

  • 抱歉直言不讳,但您应该真正开始定位来自 Lynda.com、CodeSchool、TreeHouse 或 raywenderlich.com 等网站的书籍和/或教程。您要求的是非常基本的编程方法,这些方法不仅仅与面向对象的设计相关,而是与如何开发一般应用程序有关。

标签: ios oop swift httprequest nsurlrequest


【解决方案1】:

要保持最新状态,您应该使用NSURLSession 作为您的请求类。您不一定需要监听委托回调,因为有一个闭包回调会根据您配置会话的方式为您提供错误和数据。关于放置,这取决于您的代码和您想要的内容。如果有意义,您可以将此代码放在 viewController 中,有些人创建代理类来发出他们的所有请求并向他们报告状态。这完全取决于应用程序的灵活性、稳健性和结构。如果您从 3 个不同的 viewController 发出相同的网络请求,您可能应该将网络请求放在一种代理类中以防止重复代码。如果您想了解更多关于代码设计的信息,请查看代理和单例设计模式。

这里有一个很好的关于 NSURLSession 的教程,可以帮助您入门: Raywenderlich tutorial

Proxy Design Pattern

Singleton Design Pattern

【讨论】:

    【解决方案2】:

    就像其他人提到的那样,您需要学习的东西远远多于 SO 上的单一答案所能提供的。同时,看看Alamofire,一个围绕NSURLSession 构建的相当全面的网络库。在其中,您将找到用于创建请求的代码等等。 Alamofire 提供了一种预构建的、OO 方式来执行网络请求,适用于一次性请求或整个网络管理器类。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-14
      • 1970-01-01
      • 1970-01-01
      • 2018-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-04
      相关资源
      最近更新 更多