我研究了过去几个小时,但在我的 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
; - 使
callback
的String
参数可选(而不是在出现错误时返回""
); - 我认为最好返回实际的
NSError
对象,而不仅仅是本地化的描述(在某些时候,您可能实际上关心code
或域
错误) - 使用 Swift 2
guard
语句来防止发生任何错误。
关于swift - iOS 9 基本 HTTP 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33326555/