如何 return 数据类型:Swift 中的 NSDictionary
How to return the data type: NSDictionary in Swift
我想要return数据类型:NSDictionary。但是主要代码得到了空的 NSDictionary。
我怎么解决这个问题?我在函数中使用了 JSON 方法。
func regionDataReturn(rid: Int) -> NSDictionary {
var jsonResult: NSDictionary = NSDictionary()
let urlPath: String = "MY_SERVER/test.php"
var url: NSURL = NSURL(string: urlPath)!
var request1: NSMutableURLRequest = NSMutableURLRequest(URL: url)
request1.HTTPMethod = "POST"
var stringPost="test_id=\(tid)" // Key and Value
let data = stringPost.dataUsingEncoding(NSUTF8StringEncoding)
request1.timeoutInterval = 60
request1.HTTPBody=data
request1.HTTPShouldHandleCookies=false
let queue:NSOperationQueue = NSOperationQueue()
NSURLConnection.sendAsynchronousRequest(request1, queue: queue, completionHandler:{ (response: NSURLResponse!, data: NSData!, error: NSError!) -> Void in
var err: NSError
jsonResult = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as NSDictionary
self.navigationItem.title = jsonResult["name"] as? String
NSLog("\(self.navigationItem.title)")
})
return jsonResult
}
你不能那样做。
您正在调用一个异步函数来获取数据,您的方法将在获取数据之前 return。您有两种选择来解决此问题:
- 使用通知,传递完成处理程序或输出参数将值传递回被调用的方法
- 使其成为同步调用
var response: AutoreleasingUnsafeMutablePointer<NSURLResponse?> = nil
var error: NSErrorPointer = nil
var data : NSData = NSURLConnection.sendSynchronousRequest(request1, returningResponse: response, error:nil)!
var err : NSError
jsonResult = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as NSDictionary
self.navigationItem.title = jsonResult["name"] as? String
NSLog("\(self.navigationItem.title)")
我想要return数据类型:NSDictionary。但是主要代码得到了空的 NSDictionary。
我怎么解决这个问题?我在函数中使用了 JSON 方法。
func regionDataReturn(rid: Int) -> NSDictionary {
var jsonResult: NSDictionary = NSDictionary()
let urlPath: String = "MY_SERVER/test.php"
var url: NSURL = NSURL(string: urlPath)!
var request1: NSMutableURLRequest = NSMutableURLRequest(URL: url)
request1.HTTPMethod = "POST"
var stringPost="test_id=\(tid)" // Key and Value
let data = stringPost.dataUsingEncoding(NSUTF8StringEncoding)
request1.timeoutInterval = 60
request1.HTTPBody=data
request1.HTTPShouldHandleCookies=false
let queue:NSOperationQueue = NSOperationQueue()
NSURLConnection.sendAsynchronousRequest(request1, queue: queue, completionHandler:{ (response: NSURLResponse!, data: NSData!, error: NSError!) -> Void in
var err: NSError
jsonResult = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as NSDictionary
self.navigationItem.title = jsonResult["name"] as? String
NSLog("\(self.navigationItem.title)")
})
return jsonResult
}
你不能那样做。
您正在调用一个异步函数来获取数据,您的方法将在获取数据之前 return。您有两种选择来解决此问题:
- 使用通知,传递完成处理程序或输出参数将值传递回被调用的方法
- 使其成为同步调用
var response: AutoreleasingUnsafeMutablePointer<NSURLResponse?> = nil
var error: NSErrorPointer = nil
var data : NSData = NSURLConnection.sendSynchronousRequest(request1, returningResponse: response, error:nil)!
var err : NSError
jsonResult = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as NSDictionary
self.navigationItem.title = jsonResult["name"] as? String
NSLog("\(self.navigationItem.title)")