swift – 如何从NSURLSession.sharedSession()获取数据dataTaskWithRequest

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,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)
}

这样,只有当异步任务完成时才调用完成.这是一种“返回”数据而不实际使用返回的方式.

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,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)
}

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...