2015-09-27 33 views
0

返回值我有一個函數:不能調用非功能型「JSON」的價值,如何從塊斯威夫特

func connectToWS(callback: (JSON)) -> Void { 
    let urlPath: String = "http://xxx.webservice.com" 
    let url: NSURL = NSURL(string: urlPath)! 
    let request: NSURLRequest = NSURLRequest(URL: url) 

    let session = NSURLSession.sharedSession() 
    let task = session.dataTaskWithRequest(request){ 
     (data, response, error) -> Void in 
     if error != nil { 

     } else { 
      let json:JSON = JSON(data: data!) 
      // RETURN? 
     } 
    } 
    task.resume() 
} 

所有我想要做的是返回的NSDictionary JSON序列字典,當我調用這個函數。但似乎我不能,因爲我的JSON數據在dataTaskWithRequest塊中。我已經使用回撥嘗試,但它顯示了錯誤:

Cannot call value of non-function type 'JSON' 

任何人都可以點我的方向來解決這個問題?

我正在使用SwiftyJSON作爲第三方庫。

回答

2

嘗試了這一點:

func connectToWS(callBack: ((data: NSData!, response: NSURLResponse!, error: NSError!) -> Void)?) { 
    let urlPath: String = "http://xxx.webservice.com" 
    let url: NSURL = NSURL(string: urlPath)! 
    let request: NSURLRequest = NSURLRequest(URL: url) 
    let session = NSURLSession.sharedSession() 

    let task = session.dataTaskWithRequest(request) { data, response, error in 
     callBack?(data: data, response: response, error: error) 
     return 
    } 

    task.resume() 
} 

然後調用此類似:

connectToWS() { data, response, error in 
    if error != nil { 
     if error.domain == NSURLErrorDomain && error.code == NSURLErrorTimedOut { 
      print("timed out") // note, `response` is likely `nil` if it timed out 
     } 
    } 
} 
+0

感謝您的幫助。只是最後一個問題: 是connectToWS(){數據,在一個塊中的響應錯誤? –

+0

是的。它的「封閉」更精確。如果'closure'是該函數的唯一參數,那麼這就是你如何編寫它的方法。 – Abhinav