- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
class PostFOrData {
let url = NSURL( string: "http://210.61.209.194:8088/SmarttvWebServiceTopmsoApi/GetReadlist")
var picUrl = NSURL(string : "http://210.61.209.194:8088/SmarttvMedia/img/epi00001.png")
var responseString : NSString = ""
func forData() -> NSString {
let request = NSMutableURLRequest( URL: url!)
request.HTTPMethod = "POST"
var s : NSString = ""
let postString : String = "uid=59"
request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding)
let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
data, response, error in
if error != nil {
println("error=\(error)")
return
} else {
println("response = \(response!)")
self.responseString = NSString(data: data, encoding: NSUTF8StringEncoding)!
println("responseString = \(self.responseString)")
}
}
// I want to return NSString here, but I always get nothing
return self.responseString
}
}
有人知道如何从任务中获取数据吗?
最佳答案
您无法直接从异步任务返回数据。
Swift 2 的解决方案是创建一个如下的完成处理程序:
class PostFOrData {
// the completion closure signature is (NSString) -> ()
func forData(completion: (NSString) -> ()) {
if let url = NSURL(string: "http://210.61.209.194:8088/SmarttvWebServiceTopmsoApi/GetReadlist") {
let request = NSMutableURLRequest( URL: url)
request.HTTPMethod = "POST"
let postString : String = "uid=59"
request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding)
let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
data, response, error in
if let data = data,
jsonString = NSString(data: data, encoding: NSUTF8StringEncoding)
where error == nil {
completion(jsonString)
} else {
print("error=\(error!.localizedDescription)")
}
}
task.resume()
}
}
}
let pfd = PostFOrData()
// you call the method with a trailing closure
pfd.forData { jsonString in
// and here you get the "returned" value from the asynchronous task
print(jsonString)
}
这样,只有当异步任务完成时才会调用完成。这是一种“返回”数据的方法,而无需实际使用 return
。
Swift 3 版本
class PostFOrData {
// the completion closure signature is (String) -> ()
func forData(completion: @escaping (String) -> ()) {
if let url = URL(string: "http://210.61.209.194:8088/SmarttvWebServiceTopmsoApi/GetReadlist") {
var request = URLRequest(url: url)
request.httpMethod = "POST"
let postString : String = "uid=59"
request.httpBody = postString.data(using: String.Encoding.utf8)
let task = URLSession.shared.dataTask(with: request) {
data, response, error in
if let data = data, let jsonString = String(data: data, encoding: String.Encoding.utf8), error == nil {
completion(jsonString)
} else {
print("error=\(error!.localizedDescription)")
}
}
task.resume()
}
}
}
let pfd = PostFOrData()
// you call the method with a trailing closure
pfd.forData { jsonString in
// and here you get the "returned" value from the asynchronous task
print(jsonString)
}
关于swift - 如何从 NSURLSession.sharedSession().dataTaskWithRequest 获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44575848/
是什么让它“共享”?我正在学习 Swift iOS 开发类(class),这个问题不断出现。在粗略的网络搜索中,我可以看出 NSURLSession.sharedSession() 是 NSURLSe
有人知道[NSURLSession sharedSession]的超时配置是什么吗? 我正在调试,这些信息会很有帮助。 编辑 显然我的问题不清楚(!)。我不是在问如何更改超时。我问的是默认值是多少。所
我遇到了一个非常奇怪的问题。 我正在像这样使用 session.DataTaskWithURL: let task = session.dataTaskWithURL(url!, comple
当我想将 mysql 数据库中的数据填充到类对象中时,我的问题出现了。我试图返回一个对象数组,它返回 nil,然后它以某种方式填充自己。在返回空白数组之前如何使其填充? 这是我的代码和代码输出的屏幕截
我现在正在开发一个小型应用程序,我需要连接到一些网站才能获取一些信息。 这是我做的函数,90%的情况下可以满足我的需求。 func requestFunctionOn(url: String) {
我为 NSURLSession 创建了类别,然后我遇到了一个问题。在 iOS 7 中,[[NSURLSession sharedSession] isKindOfClass:[NSURLSession
我需要将自定义用户代理字符串设置为 NSURLSession 的 sharedSession。即每当我调用 [NSURLSession sharedSession] 时,它默认包含我的自定义配置,我不
class PostFOrData { let url = NSURL( string: "http://210.61.209.194:8088/SmarttvWebServiceTopmso
class PostFOrData { let url = NSURL( string: "http://210.61.209.194:8088/SmarttvWebServiceTopmso
class PostFOrData { let url = NSURL( string: "http://210.61.209.194:8088/SmarttvWebServiceTopmso
class PostFOrData { let url = NSURL( string: "http://210.61.209.194:8088/SmarttvWebServiceTopmso
class PostFOrData { let url = NSURL( string: "http://210.61.209.194:8088/SmarttvWebServiceTopmso
class PostFOrData { let url = NSURL( string: "http://210.61.209.194:8088/SmarttvWebServiceTopmso
目标: 在用户界面的文本字段中键入一个数字。按“开始!”按钮(用户界面)和:1.文本字段中的数字作为 post 变量传递到 PHP 脚本(通过 NSURLSession..dataTaskWithRe
我在使用 NSURLSession.sharedSession().dataTaskWithRequest(request) 时遇到问题。我想根据某些 API 对我的应用程序进行身份验证,如果身份验证
class PostFOrData { let url = NSURL( string: "http://210.61.209.194:8088/SmarttvWebServiceTopmso
为什么没有打印任何结果? 我一直在寻找答案。我尝试了许多不同的示例代码块。除非产生错误,否则打印语句永远不会触发。例如:如果我仅将 URL 更改为“http”,而没有其他任何内容,我自然会收到错误并打
我有一段代码可以从 php 返回的 Json 中获取员工数据,如下所示: [{"id":"1","email":"KK","password":"KKK","firstName":"KKK","las
我是 iOS World 的新手。当我看到下载文件的方法时。我看到这段代码: // create url let imageURL = NSURL(string: Co
我正在尝试执行 2 个 HTTP 请求在第一个请求中,我将获得一个将在第二个请求中使用的 var。我的问题是,当我使用下面的代码执行此操作时,它只运行第二个请求而没有运行第一个请求。 let
我是一名优秀的程序员,十分优秀!