ios - 在 Swift 中创建一个发出 HTTPRequest 的类

标签 ios oop swift httprequest nsurlrequest

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

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

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 中?

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

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

谢谢

最佳答案

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

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

Proxy Design Pattern

Singleton Design Pattern

关于ios - 在 Swift 中创建一个发出 HTTPRequest 的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28315096/

相关文章:

ios - NSClassFromString 用于目标名称中包含空格的 Swift 类

java - 在重载的构造函数中重用代码

PHP:如何制作可测试的静态方法

javascript - 将 JQuery 事件分配给自定义对象方法

ios - Swift 中的 React-native iOS 桥接模块

Swift:返回受泛型类型约束的类

iOS swift MapKit,从搜索回调处理程序添加的图钉未出现在 map 上

ios - 在 Swift 1.2 中获取触摸坐标

ios - Swift 自定义动画进度

ios - DatePicker 出现在多个文本字段中