swift - iOS 9 基本 HTTP 请求

标签 swift ios9 xcode7

我研究了过去几个小时,但在我的 Swift 应用程序中找不到适用于 iOS 9 的示例。我只是想对 url“http://www.example.com”执行 HTTP GET 请求。该 URL 将返回将被解析的 XML 数据,但现在我只想让 HTTP GET 命令运行。

我是 Xcode 的新手,但有一些编程背景,但不知道如何获取 URL 来执行 GET 命令

我有一个按钮,我希望它在按下按钮时运行 HTTP GET 请求。在线查看 NSURLSession 示例时,我找不到不会引发语法错误的示例。任何帮助,将不胜感激。下面是我发现的一个,但它抛出了一堆错误。任何指导将不胜感激。

import Foundation
import XCPlayground
func httpGet(request: NSURLRequest!, callback: (String, String?) -> Void) {
    var session = NSURLSession.sharedSession()
    var task = session.dataTaskWithRequest(request){
        (data, response, error) -> Void in
        if error != nil {
            callback("”, error.localizedDescription),
        } else {
            var result = NSString(data: data, encoding:
                NSASCIIStringEncoding)!
            callback(result, nil)
        }
    }
    task.resume()
}
var request = NSMutableURLRequest(URL: NSURL(string: “http://www.google.com")!)

httpGet(request){
    (data, error) -> Void in
    if error != nil {
        println(error)
    } else {
        println(data)
    }
}
XCPSetExecutionShouldContinueIndefinitely(continueIndefinitely: true)

最佳答案

代码示例的清理 Swift 2 再现可能如下所示:

import Foundation
import XCPlayground

func httpGet(request: NSURLRequest, callback: (String?, NSError?) -> Void) {
    let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { data, response, error in
        guard error == nil && data != nil else {
            callback(nil, error)
            return
        }

        callback(String(data: data!, encoding: NSUTF8StringEncoding), nil)
    }
    task.resume()
}

let request = NSMutableURLRequest(URL: NSURL(string: "http://www.google.com")!)

httpGet(request) { string, error in
    guard error == nil && string != nil else {
        print(error?.localizedDescription)
        return
    }

    print(string!)
}

XCPlaygroundPage.currentPage.needsIndefiniteExecution = true

这修复了原始代码片段中的明显错误(偶尔使用 而不是 ";使用弃用了 println 而不是 print;在第一个 callback 调用之后多余的 ,;添加一些缺少的可选解包;等等.).

这也解决了一些其他问题,即

  • 使用String而不是NSString
  • 使 callbackString 参数可选(而不是在出现错误时返回 "");
  • 我认为最好返回实际的 NSError 对象,而不仅仅是本地化的描述(在某些时候,您可能实际上关心 code错误)
  • 使用 Swift 2 guard 语句来防止发生任何错误。

关于swift - iOS 9 基本 HTTP 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33326555/

相关文章:

ios - Xcode 12.5 : SPM Dependency Cache Location

由于 URL,Cordova Ionic 电子邮件插件无法在 iOS 9 上运行

ios - 自定义 UIApplicationShortcutIcon

objective-c - UIAlertController 在 iOS 9 中不工作

ios - 在 Xcode 中更改 UIlabel 文本大小?

ios - 特定目标/方案的 xcodebuild 测试

ios - HKObserverQuery无法在iPhone上运行

swift - Rx swift : chaining several actions

bash - 修改Xcode的project.pbxproj中的PRODUCT_BUNDLE_IDENTIFIER

ios - 在 UITableViewController 上设置背景