ios - 有没有更好的方法来返回网络请求的响应?

标签 ios swift

我创建了一个 Authentication 类(我将其视为一个模型),它接受登录凭据和一个闭包。闭包将网络请求的响应返回给 Controller 。我只想知道这是否是更好的方法,如果不是,最好的方法是什么?

注意:我正在使用 SwiftyJson 库

模型函数

func login(userName: String, password: String, completionHandler: (response: JSON) -> ()) {
    let device = UIDevice().identifierForVendor
    let postData = "login=\(userName)&password=\(password)&deviceid=\(device)"

    let request = NSMutableURLRequest(URL: NSURL(string: APP_SERVICE_LOGIN)!)
    request.HTTPMethod = HTTP_REQUEST_POST
    request.HTTPBody = postData.dataUsingEncoding(NSUTF8StringEncoding)

    let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
        (data, response, error) -> Void in

        if (error == nil) {
            completionHandler(response: JSON(data: data!))
        } else {
            print("Error = \(error)")
            print("Response = \(response)")
        }
    }

    task.resume()
}

Controller

override func viewDidLoad() {
    super.viewDidLoad()

    authentication.login("test@test.com", password: "test", completionHandler: {(response: JSON) -> () in
        print(response)
    })
}

谢谢

最佳答案

你这样做是正确的社交方式。

我唯一建议您拥有的是一个单独的网络包装器,它采用 header 、正文和完成 block ,并代表其他人进行所有网络连接。

这样你就不需要一次又一次地处理 NSMutableURLRequest, NSURLSession 等等。使用简单的 API 调用自定义网络类就可以了。它还有助于集中到一个地方进行调试!

关于ios - 有没有更好的方法来返回网络请求的响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33459238/

相关文章:

ios - 在 cellForItemAtIndexPath 中的 UICollectionViewCell 中更改 UIView 的框架

ios - 一维条码扫描器 IOS (Xcode)

swift - FirebaseUI 不显示任何输入字段或按钮

swift - 无法将 Swift 嵌套类作为 AnyClass 参数传递

ios - 多个持久存储

ios - 如何以编程方式更改或制作新的启动图像?

ios - 在 IOS 中安装 firebase cocoapods 时出现未知参数 -swift

iOS 10 : How to show incoming VOIP call notification when app is in background?

objective-c - UITableView 具有来自服务器的多维数组数据

ios - Swift 中的属性类型转换 : good practice