我在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函數連接到服務器,向服務器發送請求並將服務器響應返回給調用函數。
也讓我知道如何使這個函數作爲全局函數,以及在需要它的代碼中全局調用這個全局函數。
那麼我應該在代碼中更改什麼? – 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