通过一个全局函数连接到服务器,发送请求并接收响应中的快速
问题描述:
我在Swift以及Xcode中都很初学。我正在构建一个应用程序,在该应用程序中,我需要将服务器连接到特定的IP和端口,发送JSON请求以断开并在代码中的许多位置接收其响应。所以我想做一个全局函数(可以从代码的任何部分访问)。我也想实现一个模块(如在VB6.0中)或文件,其中包含所有的全局函数,并可以在需要的地方调用。通过一个全局函数连接到服务器,发送请求并接收响应中的快速
我的第一个问题是,我可以使用httpGet函数将以下函数的服务器响应返回给调用函数。
该函数连接到服务器,向服务器发送请求并仅在'//返回abc !,'代码被评论。
func connserv(jsonString:NSDictionary) -> NSDictionary{
var abc: NSDictionary?
// This is the action performed when clicked on the Connect button on the connectivity screen
println("------------------Function connserv")
let prefs = NSUserDefaults.standardUserDefaults()
var IP: AnyObject = prefs.objectForKey("IP")!
var port: AnyObject = prefs.objectForKey("Port")!
println("IP in Connection : \(IP)")
println("port in Connection : \(port)")
prefs.synchronize()
//var learn = LearnNSURLSession()
let localizedModel = UIDevice.currentDevice().localizedModel
let model = UIDevice.currentDevice().model
let devicesystemVersion = UIDevice.currentDevice().systemVersion
println("HTTP request jsonString : \(jsonString)")
var request = NSMutableURLRequest(URL: NSURL(string: "https://\(IP):\(port)/")!)
var response: NSURLResponse?
var error: NSError?
//println("HTTP request jsonString : \(jsonString)")
var err: NSError?
request.HTTPBody = NSJSONSerialization.dataWithJSONObject(jsonString, options: nil, error: &err)
request.HTTPMethod = "POST"
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.setValue("application/json", forHTTPHeaderField: "Accept")
// send the request
var learn = LearnNSURLSession()
println("HTTP request : \(request)")
learn.httpGet(request) {
(resultString, error) -> Void in
if error != nil
{
println("completion block")
}
else
{
let data = (resultString as NSString).dataUsingEncoding(NSUTF8StringEncoding)
var er: NSError?
let JSONdata: AnyObject = NSJSONSerialization.JSONObjectWithData(data!, options: .MutableContainers,error: &er)!
let abc: AnyObject = NSJSONSerialization.JSONObjectWithData(data!, options: .MutableLeaves, error:&er)!
println("abc : \(abc)")
println("JSONdata : \(JSONdata)")
learn.callback(result: resultString, error: error)
}
}
//return abc!;
}
一旦我注释掉了 '//返回ABC;!'代码此功能不连接切断,不发送请求到服务器,并提供了以下错误:
HTTP request : <NSMutableURLRequest: 0x7b99abf0> { URL: https://144.1.1.45:9299/ }
fatal error: unexpectedly found nil while unwrapping an Optional value
请让我知道我可以纠正这种功能使得connserv函数连接到服务器,向服务器发送请求并将服务器响应返回给调用函数。
也让我知道如何使这个函数作为全局函数,以及在需要它的代码中全局调用这个全局函数。
答
httpGet
异步运行。它的完成块在请求完成之后才会执行。这意味着您的return
电话会在您下载对象之前发生,因此abc
仍然是nil
,尽管事实上您已用!
强制解包。你必须通过httpGet
完成块(或者只是在块内处理)通过abc
。
此功能应该已经可以在您的项目中看到其他源文件
那么我应该在代码中更改什么? – 2015-04-02 05:29:44
请让我知道,我应该改变这个功能,以便它的工作? – 2015-04-02 05:41:48
尼克,您的回复后,我搜索了更多的互联网,并发现http://stackoverflow.com/questions/24647406/how-to-use-completionhandler-closure-with-return-in-swift。通过这个链接后。我怀疑我是否可以将服务器响应返回给调用函数? – 2015-04-02 06:18:16